1

ビルド中に 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 を「強制的に」リロードする方法があるかどうか、またはソリューションをビルドするたびに一意のアセンブリ名を取得できる別の方法があるかどうか疑問に思っていました。

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 -MSBuild で GUID を生成する/

于 2015-05-07T01:04:48.193 に答える