每个构建的唯一程序集名称

Unique Assembly name every build

我试图在构建过程中更改我的 dll 的程序集名称。我创建了另一个 exe,它更改了 csproj 文件中的程序集名称,我在预构建期间执行了该文件。但是貌似我对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,或者是否有另一种方法可以在每次构建解决方案时获得唯一的程序集名称。

我在 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/