I'm doing some architectural cleanup that involves moving a bunch of classes into different projects and/or namespaces. Currently I'm moving the files by hand, building, and then manually adding using Foo statements as needed to resolve compilation errors. Anyone know of a smarter way of doing this? (We're a CodeRush and Refactor! shop, but I'd be interested to hear if Resharper has support for this)
Visual Studio 2019 provides at least 2 built-in options:
'Move to namespace...' refactoring can be triggered on any class, and VS will prompt for the target namespace.
'Change namespace to...' refactoring is provided for when the current file namespace doesn't match with the folder structure.
This can be used to move individual classes to a different namespace by:
creating the desired folder structure
moving the file
applying the mentioned refactoring (CTRL+. with the cursor over the namespace)
These operation ensures that all references are updated accordingly.
Visual Studio 2010 has the possibility to rename a namespace. Place the cursor over the namespace name and press F2. Or simply rename it in the code and press Shift+Alt+F10, Enter after seeing the red squiggle appear.
Reharper can also rename namespaces. Quote:
The Rename Namespace refactoring
allows users to rename a specific
namespace and automatically correct
all references to the namespace in the
code. The following usages are
renamed:
Namespace statements
Using directives
Qualified names of types
As mentioned in the comments, this answer is now outdated. Please see the up-to-date answer below
Resharper is the only tool I am aware of what has this ability. There is also a lot of other functionality that it has that is missing in CodeRush and Refactor!
This answer applies to at least Visual Studio 2013 and 2015 with no resharper required
Move class files to new folder
Open 'Find and replace'
Select 'Replace in Files'
Type the original namespace definition in the 'Find what' field eg. MyCorp.AppStuff.Api
Type the new namespace definition in the 'Replace with' field eg. MyCorp.AppStuff.Api.Extensions
Select the new folder using the 'Look in' field's browse button ..., or type the folder path
Press the Replace All button
There are partial solutions for VS 2015 & VS 2017 without Resharper using free extensions.
One extension which I like today (end of 2017) is the Fix Namespace VS Extension:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-599079.FixNamespace#overview
It analyses the folder structure of your solution and offers namespace refactoring using that. Unfortunately it isn't perfect: It doesn't track dependencies that well, but solved the lion's share of the work for me.
With Resharper: CTRL+R+O
Then press the down arrow key twice to select Move Type To Another Namespace.
Since the answer above was provided (I'm guessing) this feature has been added to CodeRush. Just place the carat on the Type to be moved and you'll see a Move Type to Namespace option on the Refactor! context menu. This will move the type to the new namespace and update references. You may still want to move the file to a solution folder that matches the name of the namespace though.
It's not the best outcome but can be done without plugins or tools, only with Visual Studio. Find and replace in Entire Solution, Match case, Match whole word.
Find what: class name, Replace with: New.Namespace.ClassName (fully qualified class name).
If you have 100+ references of the moved class and other classes in old namespace what are not moved this is the only foolproof and free solution I found. The only case when it leads to errors is when you have same class name in other namespace.
If you cannot, or do not want to use Re$harper, Notepad++ is your friend:
Make sure you don't have usaved changes inside Visual Studio for the files you need to move to the new namespace
Open all the files that contain the namespace that needs to be changed in Notepad++
Open Find & Replace (CTRL + H)
Fill the Find what and Replace with fields
Press Replace All in All Opened Documents
Save all changes in all documents (CTRL + SHIFT + S)
Switch to Visual Studio and reload all the documents (Yes to all at the prompt)
DONE
Related
We are very close to have a fully polished application and now, we find occasional old namespaces or sometimes, no namespaces in many projects. There are around 350 projects. Is there a way have all the namespaces listed from a solution?
I'd start with the Default namespace first:
These are quite messed up in different projects but the code files under are Ok.
View --> Object Browser will display a window with a treeview on the left letting you expand each project and see the namespaces it contains. That's probably the most efficient way of manually reviewing things. Note it won't show you the default namespace in each csproj but will show you all of the namespaces that are actually used. To find all the default namespaces, crack open a csproj file in notepad to see how the default namespace is defined then do a "find in files" to look for that section in each of the other csproj files.
Is it possible to exclude certain files from search in Visual Studio.
For example jquery.js is almost always polluting my search results with half result coming from that file.
I know you can white-list specific types, but when I want to search in .js extension is there solution for that?
Vote here for feature: https://developercommunity.visualstudio.com/idea/405990/code-search-exclude-files-from-search.html?inRegister=true
Altough it does not solve your problem it may help out a bit
Ctrl + Shift + F should trigger the Find and Replace window.
From there, click Result Options and select "Display file names only".
It won't have all the info you need but might make it easier to recognize the files.
In Visual Studio 2019 they modernized the "find in files" feature, now you can exclude files, file extensions and directories using an exclamation mark before the items to be excluded in the "File types" textbox, like this:
*.*;!jquery.js
another example:
!*\bin\*;!*\obj\*;!*\.*;!*.xml
More info: https://devblogs.microsoft.com/visualstudio/modernizing-find-in-files/
In Visual Studio 2017 there is a workaround: you can right-click a search result and then click Delete. I use it to eliminate the big minified files from the Find Results window.
I've got the same problem with unwanted .js files polluting the search result. Especially the minified versions (e.g. jquery.min.js) are really annoying since they consist of only one (1) single very very long line. All of that line is displayed line-wrapped in search result. Not ideal!
Possible solutions:
Since .js files are (normally) just static content, you should be able to name them as you like. Rename it to jquery.min.js.nosearch and include the file with <script type="text/javascript" src="jquery.min.js.nosearch"></script> in HTML.
Get these files from an CDN and delete your local files.
Exclude these files from the VS project, provided that you can handle the inclusion of them in an other way when needed, e.g. when deploying (and provided that you scope your search to solution/project, not folder).
From this answer there was an UltraFind extension, which unfortunately doesn't exist for newer than 2010 (but see thread for hack to "update" it to 2012)
It's not particularly elegant - I'd be reluctant to call it a solution to the question - but if you can have Visual Studio Code running side-by-side with VS201x, its Find and Replace feature is pretty sophisticated. If you're using Git for source control, it will exclude any files or folders found in .gitignore from its search results - this is great when used in conjunction with tools like LibMan. Failing that, you can always manually add files / folders to its "files to exclude" option when searching.
In other words lets say i have already completed a project using visual studio. Now i want to make a separate project that is identical to the already completed project(except for some future changes).
How can i do this while keeping the new project in the same workspace as the original without:
creating a new project and copy pasting code over
copy-pasting the folder that holds the project and changing the name of the folder
I'm asking because there must be a better way to do this than the two options above.
Right click on the solution and "Open Folder in File Explorer"
Copy the project folder
Rename the new Project folder
Open the new project folder and rename the .csproj file
Right click on the solution and "Add" "Existing Project" to the solution
Open the "Properties" for the new project
Under "Application", change the assembly name and default namespace
Select "Tools", "Create GUID", Option 6, "Copy"
Under Assembly information, change the name and product
Paste in the GUID and clear the "" suffix
Rename the namespace in the source files to reflect the new
namespace from above.
Depending on your needs, you could get by with a subset of these steps (e.g. steps 1 and 2), however, I think a complete copy requires all of the steps mentioned.
The second option is exactly what you should do: duplicate the folder containing your project and then rename it.
To make this work, you might also have to change the GUID used by the project to avoid clashes. Visual Studio is supposed to do this automatically if another project with the same GUID already exists in the solution. If something goes wrong, you can do it manually by editing the project file (it's the field called ProjectGUID). It's just a standard GUID value, so use any freely-available GUID generator like the one bundled with Visual Studio or one you find online.
Why should there be a better option than this? What would that "better" option look like? It's not like there's going to be a menu command for it, this isn't a very commonly used feature. Most programmers use a source control system that handles branching/duplicating for them automatically and [mostly] without pain.
Is it possible to rename the namespace, projectfolder, solution name in windows phone? I have a paid version and free version of app. The free version of the app has minor modification. So I tried copying the whole project folder of the paid version and tried renaming the namespace, solution name, foldernames. I landed up in a bag full of errors!!
Is there any way i can do this? or do I have to do it the hard way?, have to create a new project and files and Ctrl+C the whole content???
Could someone help me on this?
Alfah
Why do you want to rename the solution and project? If you want to change the name of the app, you just have to edit the manifest file.
If you really want to change the namespace, you can use Visual Studio's refactoring features: http://msdn.microsoft.com/en-us/library/6kxxabwd.aspx
Yes, but it's a 3-step process:
Rename all the namespaces, references, configuration etc (basically, everything you can find through full solution code search). Make sure it compiles.
Close solution. Rename files on the disk. Open the solution file in the Notepad, update the renamed folder references. Make sure that after opening the solution in VS it opens correctly.
In the project properties, select the Startup Object (http://www.jayway.com/2011/10/12/fixing-wp7-app-not-starting-after-project-rename/)
Yes definitely you can!
Please refer following steps
Open LocalizedStrings.cs and refactor namespace from it.
Rename project solution
Expand properties and open AppManifest file
Change the display name and tile title
Right click on solution file and select clean solution from contextual menu.
Here you are ready with your project with new name! Enjoy!
If I create an empty SharePoint 2010 project in VS2010, then add features to the project, the features are named Feature1.feature and Feature2.feature, etc, etc. I'd like to give these features a sensible name in VS2010, for example MyCustomFeature.feature and MyOtherCustomFeature.feature, but I can't work out how to do this. VS2010 provides "right-click, rename" support, but it does not work for me.
Can anyone help me out?
I found the answer to my question. The environment I am working in has a tilde character at the start of all Active Directory login names, for example '~abc'. The default file save location in Visual Studio is therefore 'C:\Users\~abc\Documents\Visual Studio 2010\Projects'.
The Sharepoint tools in VS2010 do not like that tilde character. The tilde prevents you from renaming any of the "FeatureX" nodes under the Features folder. VS2010 or the event log do not report an error, the rename just fails. As soon as you move the project to C:\MyTestProject, feature rename works just fine.
Additionally, a user cannot create a My Site if the login name contains the tilde character:
Event ID 5187: My Site creation failure for user 'DOMAIN\~abc' for
site url 'http://[webapp]/personal/~abc'. The exception was:
Microsoft.Office.Server.UserProfiles.PersonalSiteCreateException: A
failure was encountered while attempting to create the site. --->
Microsoft.SharePoint.SPException: "/personal/~abc" contains illegal
character '~'.
KB905231 warns against having a tilde in Active Directory group names, but not login names:
http://support.microsoft.com/default.aspx?scid=kb;en-us;905231.
My advice - avoid the tilde!
Adding to the list: My project had a comma in the path, VS wasn't allowing me to rename the feature. I took off the comma and was able to rename the feature. It seems SharePoint Tools doesn't like anything "unusual" on the project path. Thanks to PeteL and Yuri that pointed me to the solution.
I had the same issue with VS 2010 and SharePoint tools, looking to this theme I decide to create a new project without any illegal chars in path, after several experiments I found out that my actual path contained '!' symbol, in root folder name - 'd:!Projects' that doesn't allow to change the feature name. Also both '_' and '.' work fine in folder names.
Works fine for me. Do you have Source Control? I had some issues where I was using SVN and I couldn't rename a file I've just created because SVN was telling me I had uncommited changes. After commiting, renaming worked fine.
It's definitely possible.
I use SharePoint 2010 projects in VS2010 with TFS and have some sort of hack to rename newly added feature with default name "Feature" to the project.
1) Exclude feature from the project - it will disappear in the project tree but will still visible if you click "Show All Files"
2) Rename file "Feature1.feature" and its parent folder via the properties window or right click on the feature file and select "Rename" option. Make sure that file "Feature1.feature" and its parent folder have the same names e.g. "ListsAndContentTypes.feature" for feature file
and "ListsAndContentTypes" for the parent folder
3) Right click on the parent feature folder (in example above "ListsAndContentTypes" ) and click "Include in project"
Now the feature file have appropriate name.
4) Make sure that it is included in the package - check the "Package" project item.
Hope this helps.