我正在尝试在构建期间更改我的dll的程序集名称。我已经创建了另一个更改csproj文件中的程序集名称的exe,我在预构建期间执行该文件。但似乎我对csproj文件的更改只在构建完成后生效,这当然不是我想要的。
每次构建时,程序集名称必须是唯一的,所以我通过附加GUID来创建它。
var xmlDoc = XDocument.Load(projectFile);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
string newAssemblyName = originalAssemblyName + "_" + Guid.NewGuid().ToString("N");
xmlDoc.Element(ns + "Project").Element(ns + "PropertyGroup").Element(ns + "AssemblyName").Value = newAssemblyName;
xmlDoc.Save(projectFile);
我想知道是否有一种方法可以在预构建过程中“强制”重新加载csproj,或者如果有另一种方法,我可以在每次构建解决方案时获得唯一的程序集名称。
答案 0 :(得分:1)
我在VS2013的csproj文件中做了一些成功:
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
[...]
<PropertyGroup>
<MyNewGuid>$([System.Guid]::NewGuid())</MyNewGuid>
</PropertyGroup>
[...]
<AssemblyName>$(MyNewGuid)</AssemblyName>
至少,每次我进行重建时,它似乎都会为名称生成一个具有不同GUID的程序集。
如果您使用的是特别旧版本的msbuild,您可能希望在此处查找创建GUID的替代方法:http://phoebix.com/2013/08/08/who-got-the-func-part-3-generating-a-guid-in-msbuild/