c# - 通过 msbuild 参数在 AssemblyInfo.cs 中设置 AssemblyInformationalVersion
问题描述
我正在寻找一种方法来做以下事情:
命令行
msbuild myProject.csproj /p:MyInfoText
在我的 AssemblyInfo.cs 中的 C# 项目中,我会这样做:
[assembly: AssemblyInformationalVersion($MyInfoText)]
我尝试了使用 BeforeBuild 选项的目标,但没有任何效果。任何人都可以并且愿意提供帮助吗?
问候
解决方案
通过 msbuild 参数在 AssemblyInfo.cs 中设置 AssemblyInformationalVersion
首先,您应该注意 MSBuild 之类的属性$MyInfoText
只能在xxxx.xxproj
文件中使用,在您的情况下,它只能在myProject.csproj
文件中使用,而不是在 cs 文件中使用。
为了实现您的要求,您可以尝试使用一个目标,它相当于在 MSBuild 中重新部署 assembly.cs 文件中的参数。基于它,您可以从 MSBuild 中的命令行覆盖其属性。只有 XML 文件中的属性可以被 msbuild 命令行中指定的值覆盖。
解决方案
1) 将一个名为MSBuildTasks的 nuget 包安装到您的项目中。
2)请导入MSBuild.Community.Tasks.Targets
存在于 nuget 包的 lib 文件夹下的文件。对我来说,我将它添加到xxxx.csproj
文件顶部的文件中,如下所示:
<Import Project="C:\Users\Admin\source\repos\ConsoleApp\packages\MSBuildTasks.1.5.0.235\tools\MSBuild.Community.Tasks.Targets" />
3)此外,添加这些:</p>
<PropertyGroup>
<ProductName>$(AssemblyName)</ProductName>
<CompanyName></CompanyName>
<Version>1.0.0.0</Version>
<MyInfoText>xxx</MyInfoText>
</PropertyGroup>
<ItemGroup>
<AssemblyVersionFiles Include="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs" />
</ItemGroup>
<Target Name="AssemblyVersion" Inputs="@(AssemblyVersionFiles)" Outputs="UpdatedAssemblyVersionFiles" BeforeTargets="Build">
<Attrib Files="%(AssemblyVersionFiles.FullPath)" Normal="true" />
<AssemblyInfo
CodeLanguage="CS"
OutputFile="%(AssemblyVersionFiles.FullPath)"
AssemblyProduct="$(ProductName)"
AssemblyTitle="$(ProductName)"
AssemblyCompany="$(CompanyName)"
AssemblyCopyright="Copyright $(CompanyName), All rights reserved."
AssemblyVersion="$(Version)"
AssemblyFileVersion="$(Version)"
AssemblyInformationalVersion="$(MyInfoText)">
<Output TaskParameter="OutputFile" ItemName="UpdatedAssemblyVersionFiles" />
</AssemblyInfo>
</Target>
4)之后,您可以使用msbuild myProject.csproj /p:MyInfoText=xxxxxx
覆盖它。
更新 1
由于您不想安装此 nuget 包,我建议您可以将其内容从工具文件夹移动到您的项目中,以便它成为您项目的一部分。
1)在您的项目下创建一个名为newtool的文件夹
2)将工具文件夹的内容从nuget包中复制到你项目中的newtool文件夹中。
3)更改为在您的xxx.csproj
文件中使用此导入标记
<Import Project="$(ProjectDir)newtool\MSBuild.Community.Tasks.Targets" />
然后你就可以意识到它并且更方便。
希望它可以帮助你。
推荐阅读
- jakarta-ee - 是否可以在 Wildfly 15 中运行完整的 Java EE 6 应用程序?
- entity-framework-6 - Entity Framework 6, Repository Pattern, Unit of Work, Save and get last ID 然后更新记录
- javascript - 如何应用锚链接,以便在滚动时在顶部留下一些空间?
- java - Spring JPA 用其他表引用一个表
- node.js - 如何将变量流式传输到文件 Node JS?
- symfony - symfony 控制台命令 113 退出代码
- django - 在删除对象模型之前添加规则的问题
- x86 - OPOS 库 v1.14 在 x64 版本的 .net 中无法正常工作
- python-3.x - 图像大小 - Python
- android - Kivy Android App - 滑动切换屏幕