【问题标题】:Is it possile to sent build number to csproj as a parameter without using the Build.proj是否可以在不使用 Build.proj 的情况下将内部版本号作为参数发送到 csproj
【发布时间】:2025-12-07 23:30:01
【问题描述】:

我对 msbuild 技术不是很熟悉。 目前,我的解决方案中有一个 build.proj,可以使用以下参数为 exe 分配内部版本号:

      <PropertyGroup Condition=" '$(BUILD_NUMBER)' != '' ">
<!-- Build Server Number -->
<Version>$(BUILD_NUMBER)Version>
<FileVersion>$(BUILD_NUMBER)FileVersion>
<InformationalVersion>$(BUILD_NUMBER)InformationalVersion></PropertyGroup><Target Name="Version">
<Attrib Files="$(MSBuildProjectDirectory)\AssemblyInfo.cs" ReadOnly="False" />
<AssemblyInfo CodeLanguage="CS"
              OutputFile="$(MSBuildProjectDirectory)\GlobalAssemblyInfo.cs"
              GenerateClass="true"
              AssemblyCopyright="Copyright © $(Year). All rights reserved."
              AssemblyConfiguration="$(BuildConfiguration)"
              AssemblyVersion="$(Version)"
              AssemblyFileVersion="$(FileVersion)"
              AssemblyInformationalVersion="$(InformationalVersion)" />  </Target>

现在我无法使用 build.proj。是否有其他方法可以为 csproj 分配内部版本号?

【问题讨论】:

  • 当您使用 build.proj 时,这些参数如何在您的 EXE 中结束? .csproj 文件也只是一个构建文件。您可以将 build.proj 中的相关位复制到 .csproj,它应该仍然可以工作。您打算如何填充 .csproj 场景中的 buildnumber 属性?
  • 好问题,它们最终出现在由 Build.proj 编辑的 AssemblyInfo.cs 文件中。我正在将该代码添加到问题中
  • 您的 .csproj 仍然引用 $(MSBuildProjectDirectory)\GlobalAssemblyInfo.cs?
  • 你打算如何开始这个构建?从命令行还是从 VS?
  • 查看这些答案:*.com/a/3623673/578411

标签: c# msbuild


【解决方案1】:

我们生成一个AssemblyInfo.cs 文件来放入我们需要定义的所有程序集属性。如果适合您,您可以在预构建时间执行此操作。在那里我们定义了AssemblyVersionAssemblyFileVersion属性和其他相关属性。

这些属性将用于编译程序集。

【讨论】:

  • 打败我。还应该注意的是,您可以将此文件设为链接文件,以便在必要时将单个生成的文件用于多个项目。
  • @NightOwl888 我们到底在做什么 :)
  • 你能给我一个你在哪里做的预构建脚本的例子吗?
  • 不,它是一个非常长且复杂的 ANT 构建文件。没有什么我可以快速隔离。但是使用您最喜欢的编程语言生成文件并不难。
最近更新 更多