首页 > 解决方案 > 通过 msbuild 参数在 AssemblyInfo.cs 中设置 AssemblyInformationalVersion

问题描述

我正在寻找一种方法来做以下事情:

命令行

msbuild myProject.csproj /p:MyInfoText

在我的 AssemblyInfo.cs 中的 C# 项目中,我会这样做:

[assembly: AssemblyInformationalVersion($MyInfoText)]

我尝试了使用 BeforeBuild 选项的目标,但没有任何效果。任何人都可以并且愿意提供帮助吗?

问候

标签: c#visual-studiomsbuildmsbuild-task

解决方案


通过 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" />

然后你就可以意识到它并且更方便。

希望它可以帮助你。


推荐阅读