在csproj文件中引用AssemblyFileVersion
本文关键字:引用 AssemblyFileVersion 文件 csproj | 更新日期: 2023-09-27 18:15:48
一旦我的nant构建已经完成,我想重命名生成的。exe文件使用后构建命令,该命令附加到项目。csproj文件的末尾(在项目元素中):
<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 ?
GetAssemblyIdentity可以获取编译程序集的信息。任务输出包含Version、PublicKeyToken和Culture的元数据项。
我使用$(TargetDir)'$(TargetName).exe
作为汇编文件。
<ItemGroup>
<AssembliesPath Include="$(TargetDir)'$(TargetName).exe" />
</ItemGroup>
<Target Name="GetAssemblyInfo">
<GetAssemblyIdentity AssemblyFiles="@(AssembliesPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
</GetAssemblyIdentity>
</Target>
然后:
<Target Name="AfterBuild">
<GetAssemblyInfo />
<Copy SourceFiles="$(TargetDir)'$(TargetName).exe" DestinationFiles="$(TargetDir)'MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
以下代码来自ISun的原始答案,这实际上是我最终如何做的,因为我在定义自定义任务时遇到了问题(ms构建引用不断被自动踢,构建不断失败)。
正如你可以从ISun的回答下的评论中看到的,我总是得到版本0.0.0.0 -尽管通过在文本编辑器中手动打开AssemblyInfo.cs,将AssemblyFileVersion和AssemblyVersion的版本更改为1.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>