gpt4 book ai didi

msbuild - 在 "BeforeBuild"目标之前捕获的程序集版本

转载 作者:行者123 更新时间:2023-12-01 15:58:53 25 4
gpt4 key购买 nike

我正在使用 MSBuild.Community.Tasks 来帮助完成两件事,即调整版本和压缩文件。我不喜欢这个,所以欢迎使用替代方法,只要它能产生我正在寻找的东西。目标是在构建之前增加构建号,然后在构建之后压缩一个新的 DLL(带有几个其他文件)。 ZIP 文件应根据构建命名。

差不多了,但是,我在 DLL 中的版本号总是比我的 version.txt 文件晚一步(从版本任务自动生成)。这是我在 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 并指定一些文件组。然后,我将项目输出复制过来,最后压缩所需的文件。

这一切都很好,除了我的 DLL 版本总是比我的实际修订号晚 1 个修订号 - 即,存储在 version.txt 中的内容以及保存的 .ZIP 文件的名称出作为。

我在这里遗漏了什么明显的东西吗?这就像在构建过程甚至开始之前就捕获了版本。

提前致谢。

最佳答案

GOSH,是的,我遗漏了一些明显的东西。在发布之前,我重新阅读了这个问题,很明显我做错了什么。我什至拼写出来了。

解决方法是将 AssemblyInfo 任务移至 BeforeBuild 目标。这是输出 .cs 文件的任务,该文件包含将正确的版本控制信息注入(inject) DLL 所需的属性。将此文件的更新保留到构建完成之后意味着我的 DLL 将永远输掉比赛。

无论如何我都会继续发布这个,以防其他人遇到类似的事情。

干杯。


编辑 对于它的值(value),这些目标的最终版本需要将 ZIP 操作移出到一个单独的目标(我称之为 ZipProjectOutput)中,因为存在竞争条件我无法解决:DLL 从未出现在 ZIP 文件中,我认为操作系统释放文件锁定的时间或其他原因可能是罪魁祸首。

我使用 AfterTargets="AfterBuild" 让 ZipProjectOutput 目标在另一个目标完成时执行。我对此并不完全满意,因为我不确定我只是在这里“赢得”比赛,而不是解决问题,但这现在对我来说相当巧妙。 #WFM

关于msbuild - 在 "BeforeBuild"目标之前捕获的程序集版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com