1

我正在尝试在构建期间更改我的 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,或者是否有另一种方法可以在每次构建解决方案时获得唯一的程序集名称。

4

1 回答 1

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 -生成-a-guid-in-msbuild/

于 2015-05-07T01:04:48.193 回答