私は MSBuild.Community.Tasks を使用して、バージョンの調整とファイルの圧縮という 2 つのことを支援しています。私はこれと結婚していないので、探しているものが生成されるのであれば、別のアプローチを歓迎します。目標は、ビルドの前にビルド番号をインクリメントし、ビルド後に新しい DLL (いくつかの他のファイルを含む) を ZIP することです。ZIP ファイルは、ビルドに従って名前を付ける必要があります。
私はほとんどそこにいますが、DLL のバージョン番号は常に version.txt ファイルの 1 ステップ遅れています (バージョン タスクから自動生成されます)。BeforeBuild
ターゲットにあるものは次のとおりです。
<Target Name="BeforeBuild" BeforeTargets="PrepareForBuild">
<Message Text=" --=== Before Build ===--"></Message>
<ItemGroup>
<PreviousFiles Include="$(MSBuildProjectDirectory)\BuildPackage\$(AssemblyName).*.zip">
<InProject>false</InProject>
</PreviousFiles>
</ItemGroup>
<Delete Files="@(PreviousFiles)"></Delete>
<Delete Files="$(MSBuildProjectDirectory)\BuildPackage\$(AssemblyName).dll"></Delete>
<Version VersionFile="version.txt" RevisionType="Increment">
<Output TaskParameter="Major" PropertyName="Major" />
<Output TaskParameter="Minor" PropertyName="Minor" />
<Output TaskParameter="Build" PropertyName="Build" />
<Output TaskParameter="Revision" PropertyName="Revision" />
</Version>
</Target>
これにより、以前のビルドからすべてのファイルが削除され、version.txt ファイルが正しくインクリメントされます。
次に、私のAfterBuild
ターゲットでこれをまとめました:
<Target Name="AfterBuild" AfterTargets="Build">
<Message Text=" --=== After Build ==--"></Message>
<AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyVersion.cs" AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
<ItemGroup>
<ProjectOutputFiles Include="bin\$(AssemblyName).dll">
<InProject>false</InProject>
</ProjectOutputFiles>
<ZipFiles Include="$(MSBuildProjectDirectory)\BuildPackage\*.*" Exclude="$(MSBuildProjectDirectory)\BuildPackage\*.zip">
<InProject>false</InProject>
</ZipFiles>
</ItemGroup>
<Copy SourceFiles="@(ProjectOutputFiles)" DestinationFolder="$(MSBuildProjectDirectory)\StorePackage" />
<Zip Files="@(ZipFiles)" WorkingDirectory="$(MSBuildProjectDirectory)\BuildPackage" ZipFileName="$(MSBuildProjectDirectory)\BuildPackage\$(AssemblyName).$(Major)-$(Minor)-$(Build)-$(Revision).zip" ZipLevel="9" />
</Target>
AssemblyInfo.cs
基本的に、いくつかのファイル グループを更新して指定しています。次に、プロジェクトの出力をコピーし、最後に必要なファイルを ZIP に圧縮します。
DLL のバージョンが実際のリビジョン番号よりも常に 1 リビジョン番号遅れていることを除いて、これはすべてうまく機能します。
ここで明らかな何かが欠けていますか?ビルドプロセスが開始される前にバージョンがキャプチャされるようなものです。
前もって感謝します。