2

nant ビルドが完了したら、プロジェクトの .csproj ファイル (Project 要素内) の末尾に追加されるビルド後のコマンドを使用して、生成された .exe ファイルの名前を変更したいと思います。

<Target Name="AfterBuild">
  <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-$(AssemblyFileVersion).exe" SkipUnchangedFiles="true" />
</Target>

上記でわかるように、実行可能ファイルの名前を MyApplication-$(AssemblyFileVersion).exe に変更しようとしていますが、結果の実行可能ファイルの名前は単に MyApplication-.exe になっているため、これは明らかに間違っています (したがって、私がしようとしているバージョンはファイル名の末尾に追加がありません)。

AssemblyInfo.cs ファイルで AssemblyFileInfoVersion を次のように定義しました。

[assembly: AssemblyFileVersion("1.5.1")]

問題は、同じプロジェクトのcsprojファイルでAssemblyFileVersionにアクセスするにはどうすればよいですか?

4

2 に答える 2

1

次のコードは ISun の元の回答からのもので、カスタム タスクの定義に問題があったため、これが実際に最終的に実行した方法です (ms ビルド参照は常に自動キックされ、ビルドは何度も失敗し続けました)。

ISun の回答の下のコメントからわかるように、テキスト エディターで AssemblyInfo.cs を手動で開いて AssemblyFileVersion と AssemblyVersion のバージョンを 1.0.0.0 に変更したにもかかわらず、常にバージョン 0.0.0.0 を取得しました。後で、Visual Studio から AssemblyInfo.cs を編集する方法を読みました。方法は次のとおりです。

  • プロジェクトを右クリックします(exeファイルを生成します)
  • [プロパティ]をクリックします。
  • 表示されるウィンドウで [アプリケーション] タブ(左側の最初のタブ) を開きます。
  • アセンブリ名、デフォルトの名前空間などを設定するためのフィールドが表示されますが、AssemblyInfo.cs を編集するには、右側にあるAssembly Informationというボタンをクリックするだけです

そして、何らかの理由で、上記の方法 (Visual Studio を使用) ですべての情報を入力した後、なぜ突然機能したのかわかりません。上記の方法を使用して AssemblyInfo.cs を最初に開いたとき、実際のファイルに入力されているにもかかわらず、すべてのフィールドが実際には空でした。

最終的に AssemblyInfo.cs が正しく機能するようになったので、ISun の元のコードを使用して目標を達成しました。プロジェクトの.csprojファイルの終了タグの直前に次のスニペットを追加します。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

<Target Name="AfterBuild">
    <GetAssemblyIdentity AssemblyFiles="$(TargetDir)\$(TargetName).exe">
        <Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
    </GetAssemblyIdentity>
    <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
于 2013-06-07T10:12:04.770 に答える