通过设置 PropertyGroup(csproj 文件中的项目变量)来设置版本号

Son*_*sen 1 c# visual-studio .net-core

我正在尝试将版本号设置为我想要的东西(阅读他们希望我做的事情)。他们想要一个特定的格式,我需要设置程序的版本。

我尝试使用UsingTask 来设置PropertyGroup 变量。我的UsingTask正在运行。

所有这一切对我来说都是新的,我设法获得了下面的代码。现在,如何设置本地项目变量?我的初始值已使用,接下来我想在UsingTask中以编程方式设置它

这一切都在 *.csproj 文件中完成

<Project Sdk="Microsoft.NET.Sdk">

<!-- my additional project variable, used below -->
  <PropertyGroup Label="UserMacros">
    <AssemblyVersion>1.2.3.5</AssemblyVersion>
  </PropertyGroup>

  <UsingTask TaskName="EnvVarSet"
      TaskFactory="CodeTaskFactory"
      AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <Task>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
// here I want to set the version number to our format
          Log.LogMessage(MessageImportance.High, "**** Setting variables");
          System.Environment.SetEnvironmentVariable("AssemblyVersion", "1.5.6.7");                 
          var a = Environment.GetEnvironmentVariable("AssemblyVersion");
          Log.LogMessage(MessageImportance.High, "**** Value is: " +a);
        ]]>
      </Code>
    </Task>    
  </UsingTask>
  
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
<!-- the version number I want to set -->
    <Version>$(AssemblyVersion)</Version>
<!-- this does not work -->
<!--    <Version>$([System.Environment]::GetEnvironmentVariable('AssemblyVersion'))</Version>-->
other values....
  </PropertyGroup>

//more project....

  <Target Name="BeforeBeforeBuild" BeforeTargets="BeforeBuild">
    <EnvVarSet />
    <Message Text="***** AssemblyVersionis now: $([System.Environment]::GetEnvironmentVariable('AssemblyVersion'))"/>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以查看文档https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-build。您可以使用 dotnct 命令来执行此操作。使用多个 doctnct 命令将版本号传递给每个命令,并通过 dotnet build- 构建项目及其所有依赖项。您可以使用以下命令来帮助您设置版本号:dotnet build /p:AssemblyVersion=1.2.3.4