我当前用于重命名项目文件夹的解决方案是:
- 从解决方案中删除该项目。
- 重命名Visual Studio外部的文件夹。
- 将项目重新添加到解决方案中。
有没有更好的办法?
我当前用于重命名项目文件夹的解决方案是:
有没有更好的办法?
Answers:
TFS用户:如果您使用的源代码管理要求您在重命名文件/文件夹之前发出警告,则请查看此答案,它涵盖了所需的额外步骤。
要在Visual Studio中重命名项目的文件夹,文件(.*proj
)和显示名称,请执行以下操作:
.sln
直接在另一个编辑器(如Notepad ++)中打开文件,并在那里更新路径。(您可能需要先在TFS中检出解决方案,等等。)注意:其他建议的解决方案包括删除项目,然后将其重新添加到解决方案中,将破坏项目引用。
如果执行这些步骤,则可能还会考虑重命名以下内容以使其匹配:
还可以考虑修改以下程序集属性的值:
AssemblyProductAttribute
AssemblyDescriptionAttribute
AssemblyTitleAttribute
使用* .sol,* csproj文件还有另一种方法。
就像这样(相对于* .sol文件):
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shani.Commands.Impl", "Shani.Commands.Impl\Shani.Commands.Impl.csproj", "{747CFA4B-FC83-419A-858E-5E2DE2B948EE}"
只需将第一部分更改为新目录,例如:
Impl\Shani.Commands.Impl\Shani.Commands.Impl.csproj
当然,不要忘记将整个项目移到该目录。
这在Visual Studio 2015中非常简单(可能在较早版本中有效)
.sln
在记事本中编辑文件,然后更改csproj的路径,即fu\bar.csproj
→ bar\bar.csproj
。伙计,我为此感到挣扎吗?不幸的是,Visual Studio中没有一键式解决方案,但是如果您运行的是Visual Studio 2012,并且您的项目处于Team Foundation Server的源代码控制之下,则可以在保持源代码历史记录的同时,通过以下方法来使其工作:
(确保您阅读了以下@mjv的评论,因为他指出您可以跳过第5-10步)
上面的指南对我有用。如果它不适合您,请尝试完全删除本地解决方案,然后删除工作空间中的文件夹映射。重新启动Visual Studio,以防万一。确保您实际上从计算机上删除了整个解决方案。现在,阅读解决方案映射到您的工作区并获取最新版本。现在尝试上述步骤。如果在执行上述步骤时出现问题,则同样适用。只需在本地删除您的解决方案并获取最新资源,便可以使用。
如果仍然有问题,请确保在尝试上述步骤之前,没有手动更改解决方案文件中的任何内容,或尝试其他“技巧”。如果您更改了某些内容并检入了它,则可能要考虑在回滚项目重命名之前进行回滚。
当然,您还想在解决方案资源管理器中重命名项目本身。您可以在执行上述步骤之前执行此操作,但是在这种情况下,请确保在应用上述步骤之前先签入该更改。您也可以在此之后执行此操作,但是请确保先执行上述所有步骤,然后在尝试在解决方案资源管理器中重命名项目名称之前检查所做的更改。我不建议尝试将以上步骤与在解决方案资源管理器中重命名项目名称混在一起。虽然可能可行,但我建议在2个单独的变更集中进行。
VS2012
!请注意您可能避免步5-10(即具有带回源控件中的文件夹重命名)中相反,如果你关闭该解决方案,然后重命名文件夹VS' Source Control Explorer
,而不是Windows Explorer
。
Folder already exists
。因此,我不得不重新命名该文件夹,WE
然后在中对其进行更改SCE
,然后将文件复制到该文件夹中,然后才能起作用。因此,请遵循上面mjv的评论。我也没有想到需要更改实际的项目文件名(不仅仅是在VS中),这是我事后才想到的,使我重复了其中一些步骤。
以下是更简单的解决方案:
需要四个步骤,但建议七个。最终,尽管项目已被完全重命名。从技术上讲,项目的文件夹名称不必与项目本身匹配,因此即使该步骤也是可选的,但是如果它们不匹配,可能会造成混淆。程序集和名称空间名称相同。
用Andersjanmyr的答案来说,首先更容易重命名项目。
同样,在执行了这些步骤之后,您可能希望将其他引用重命名为您的旧项目名称。
在项目属性中,更新程序集名称和默认命名空间。
这将更新项目文件中的以下内容...
<RootNamespace>SomeProjectName</RootNamespace>
<AssemblyName>SomeProjectName</AssemblyName>
...并将摆脱错误“名称空间与文件位置不对应,应为:'SomeProjectName'”
重命名您的根名称空间(如果您拥有ReSharper,请右键单击“名称空间”,然后转到“重构”->“重命名”)。
更改AssemblyInfo.cs中所有出现的旧项目名称。
对于Visual Studio 2017,您可以使用我的Visual Studio扩展名:
它将在以下位置重命名该项目:
[assembly: InternalsVisibleTo("MyTests")]
。当我重命名时MyTests
,它没有重命名该引用。同样,我不认为这属于您的权限,并且很容易手动解决。
对于那些使用Visual Studio + Git并希望保留文件历史记录的人(可以重命名项目和/或解决方案):
关闭Visual Studio
在.gitignore文件中,将要重命名的项目的所有忽略路径复制到这些路径的重命名版本中。
像这样使用Git move命令:
git mv <old_folder_name> <new_folder_name>
请参阅文档以了解其他选项:https : //git-scm.com/docs/git-mv
在您的.sln文件中:找到定义项目的行,然后在path中更改文件夹名称。该行应类似于:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "<Project name>", "<path-to-project>\<project>.csproj"
打开Visual Studio,然后右键单击项目→ 重命名
之后,重命名名称空间。
我读到ReSharper为此提供了一些选择。但是简单的查找/替换为我完成了工作。
删除旧的.gitignore路径。
它为我工作。
在Visual Studio 2017中对我有用的是:
它说类似“ 重新添加项目 ”。我重建了一切,一切顺利。
Dependencies
>> Add reference
>>选择新项目)
我不得不做很多次。能够重新利用现有项目,但能够重命名名称空间,文件和文件夹(包括文件/目录名称)中的文本,这确实很有用。
从根文件夹开始使用递归查找和替换意味着重命名不会中断解决方案文件和项目引用中项目的链接。
为此,我创建了一个项目来完成此任务。该应用程序还努力忽略版本控制文件夹,例如.git,.svn和.vs设置文件。更多信息在自述文件中。
一个经过验证的Visual Studio扩展解决方案,用于商业智能数据工具(SSDT-BI 2013):
经过100%的测试,在我的情况下可以完美地工作。
注意:我无法确认它是否可以在不同的项目模板和其他Visual Studio版本下工作。与往常一样,请事先备份所有内容。
我写了一个小工具,可以自动完成所有这些步骤。目前它还支持Subversion。
有关当前版本的信息,可以在Visual Studio项目重命名器信息中找到。。
现在可以从Visual Studio项目重命名器下载页面下载最新版本。
反馈非常感谢。
我经常遇到相同的问题,即在Visual Studio中重命名项目并编辑文件夹名称,项目名称和.sln文件以实现此目的。我只是编写了一个VBScript脚本来完成所有这些工作。您必须小心选择要替换的字符串。
您只需要将.vbs文件与解决方案的.sln文件放在同一目录中即可。
' Script parameters'
Solution = "Rename_Visual_Studio_Project" '.sln'
Project = "Rename_Visual_Studio_Project" '.csproj'
NewProject = "SUCCESS"
Const ForReading = 1
Const ForWriting = 2
Set objFso = CreateObject("Scripting.FileSystemObject")
scriptDirr = objFso.GetParentFolderName(wscript.ScriptFullName)
' Rename the all project references in the .sln file'
Set objFile = objFso.OpenTextFile(scriptDirr + "\" + Solution + ".sln", ForReading)
fileText = objFile.ReadAll
newFileText = Replace(fileText, Project, NewProject)
Set objFile = objFSO.OpenTextFile(scriptDirr + "\" + Solution + ".sln", ForWriting)
objFile.WriteLine(newFileText)
objFile.Close
' Rename the .csproj file'
objFso.MoveFile scriptDirr + "\" + Project + "\" + Project + ".csproj", scriptDirr + "\" + Project + "\" + NewProject + ".csproj"
' Rename the folder of the .csproj file'
objFso.MoveFolder scriptDirr + "\" + Project, scriptDirr + "\" + NewProject
注意:此修复程序适用于Visual Studio 2008,但应在此处运行。
.sln
位于父文件夹中的文件。.sln
文件的更改。点击Yes。.sln
文件与文件夹具有相同的名称。这不是必需的,但可以保持一致性。)做完了
当必须创建一个新项目,并且您想要一个不同于项目名称的项目文件夹名称时,也会出现类似的问题。
创建新项目时,该项目将存储在
./path/to/pro/ject/YourProject/YourProject.**proj
假设您想将其直接放在ject
文件夹中:
./path/to/pro/ject/YourProject.**proj
为此,我的解决方法是使用路径的最后一部分作为名称来创建项目,以便它不会创建其他目录:
./path/to/pro/ject/ject.**proj
现在,当您从Visual Studio中重命名项目时,无需离开Visual Studio就可以实现目标:
./path/to/pro/ject/YourProject.**proj
这种方法的缺点是,您还必须调整默认名称空间和Output二进制文件的名称,并且必须更新项目模板中包含的所有文件中的名称空间。
我使用Visual Studio 2013和TFS 2013。
我这样做是这样的:
有一种更简单的方法已在Visual Studio 2013 Update 1中进行了测试,适用于与TFS连接的项目:
我做了以下事情:
<创建整个文件夹的备份>
在Visual Studio 2013中重命名项目(可选/不需要)。
将项目导出为模板。
关闭解决方案。
重新打开解决方案
从保存的模板创建一个项目,然后使用您喜欢的名称。
从解决方案资源管理器中删除先前的项目。
在这一点上,我试图编译新的解决方案,并且这样做,我必须手动将一些资源和标头从旧项目文件夹复制到新项目文件夹中。这样做直到它编译没有错误为止。现在,这个新项目保存了“ .exe”文件到先前的文件夹中。*
所以->
转到Windows资源管理器,然后手动将解决方案文件从旧项目文件夹复制到新项目文件夹。
关闭解决方案,然后从新项目中打开解决方案。
如果需要,将配置更改回(x64)。
从解决方案的文件夹中删除旧名称的项目文件夹。