每个构建

时间:2015-05-06 23:48:18

标签: c# pre-build-event

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

1 个答案:

答案 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/