我正在创建一个应用程序。要更改多个项目的 namespace (解决方案),我将内容复制到另一个位置,更改文件夹名称,用文件内容替换文本(用新的 namespace 替换旧的 namespace ),一切正常。该解决方案具有文件夹(这些文件夹仅存在于解决方案中,在VS中),每个文件夹都包含项目和文件...这是原始(或模板)解决方案的结构:
MySolution
|
|---SolutionFolder1
| |
| |-- Documentation.docx
|
|---SolutionFolder2
| |
| |-- ThirdPartyLibrary.dll
|
|---SolutionFolder3
| |
| |-- MySolution.MyLibrary(**Project**)
| |
| |-- Class.cs
|
|---SolutionFolder4
| |
| |-- MySolution.MyConsoleApp(**Project**)
| |
| |-- Program.cs
|
我只将整个解决方案复制到另一个地方,甚至在.csproj和.sln文件中也更改了一些名称。如果我打开新的解决方案,所有都出现在它的位置(如上述结构),在解决方案文件夹内的项目中一个解决方案编译,一切都可以。
但是,如果在打开新解决方案时更改每个项目的ProjectGuid,则会得到以下结构:
MySolution
|
|---SolutionFolder1
| |
| |-- Documentation.docx
|
|---SolutionFolder2
| |
| |-- ThirdPartyLibrary.dll
|
|---SolutionFolder3
|
|---SolutionFolder4
|
|
|-- MySolution.MyLibrary(**Project**)
| |
| |-- Class.cs
|
|-- MySolution.MyConsoleApp(**Project**)
| |
| |-- Program.cs
|
如您所见,项目显示在解决方案文件夹之外,而其他文件夹则维护其内容并编译解决方案。
我使用 Guid.NewGuid()生成新的ProjectGuid,并更新其他.csproj和.sln文件。
这是我的代码(此方法复制每个文件的内容):
//the projectGuidCollection contains a collection of instances like this:
ProjectGuid proj = new ProjectGuid()
{
FilePath = @"c:\newpath\to\MyLibrary.csproj",
OldGuid = "D4BD0EB3-8B59-4A33-B8A3-D549065EEC6D", //<ProjectGuid>{}</ProjectGuid>
NewGuid = Guid.NewGuid().ToString()
};
public static void Replace(string filePath, string oldNamespace, string newNamespace,
IEnumerable<ProjectGuid> projectGuidCollection)
{
string text = File.ReadAllText(filePath, Encoding.UTF8);
text = text.Replace(oldNamespace, newNamespace);
List<ProjectGuid> allProjectGuids = new List<ProjectGuid>(projectGuidCollection);
if (filePath.EndsWith(".csproj"))
{
ProjectGuid currentProject = allProjectGuids.Find(o => { return o.FilePath.Equals(filePath); });
if (currentProject != null)
{
List<ProjectGuid> otherProjs = allProjectGuids.FindAll(o => { return !o.FilePath.Equals(filePath); });
//changes current ProjecGuid:
text = text.Replace(currentProject.OldGuid, currentProject.NewGuid.ToUpper());
//change other projectguids (references):
foreach (var refProject in otherProjs)
{
text = text.Replace(refProject.OldGuid, refProject.NewGuid);
}
}
}
//update new projectguids in solution file:
if (filePath.EndsWith(".sln"))
{
foreach (var p in allProjectGuids)
{
text = text.Replace(p.OldGuid.ToUpper(), p.NewGuid.ToUpper());
}
}
File.WriteAllText(filePath, text,Encoding.UTF8);
}
我需要你的帮助。
最佳答案
在花了很多时间搜索信息之后,终于在@MarkLakata的评论中找到了解决方案here。
因此,解决方案是:
//the projectGuidCollection contains a collection of instances like this:
ProjectGuid proj = new ProjectGuid()
{
FilePath = @"c:\newpath\to\MyLibrary.csproj",
OldGuid = "D4BD0EB3-8B59-4A33-B8A3-D549065EEC6D", //<ProjectGuid>{}</ProjectGuid>
NewGuid = Guid.NewGuid().ToString("B") // <--- HERE THE SOLUTION!!
};
好了,仅此而已。
关于c# - ProjectGuid(.csproj),如何正确生成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29839957/