0

我试图让 MSBuild 自动更新项目的 AssemblyVersion 和 AssemblyFileVersion。

具体来说,只是构建和修订号。

所以,如果我的源文件开始为

[assembly: AssemblyVersion("1.2.3.4")]

我的版本号和修订号是 13 和 14,我希望它变成:

[assembly: AssemblyVersion("1.2.13.14")]

但是,我没有得到预期的结果。相反,我得到了这样的东西——大概是因为我进行构建时是 11 月 28 日。

[assembly: AssemblyVersion("1.0.1128.01")]

下面我的 .csproj 文件中的相关信息。

  <Import Project="$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
  <Import Project="$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.VersionNumber.targets"/>
  <PropertyGroup>
    <BuildDependsOn>
      AssemblyVersion;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>
  <ItemGroup>
    <AssemblyVersionFiles Include="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"/>
  </ItemGroup>
  <Target Name="AssemblyVersion" Inputs="@(AssemblyVersionFiles)" Outputs="UpdatedAssemblyVersionFiles">
    <Message Text="Setting AssemblyVersion..." Importance="High" />
    <AssemblyInfo
      AssemblyInfoFiles="%(AssemblyVersionFiles.FullPath)"
      AssemblyBuildNumber="12"
      AssemblyBuildNumberType="NoIncrement"
      AssemblyRevision="13"
      AssemblyRevisionType="NoIncrement"
      />
  </Target>

在这一点上,我正准备完全废弃扩展,将我的程序集和文件版本拆分为两个单独的文件,并使用 powershell 读取和覆盖它们的值。可能是一个更理想的解决方案,因为它只能在构建机器上进行,所以我不必担心如果开发人员没有安装扩展包,他们会得到奇怪的构建结果。

不过,我不喜欢被殴打,所以我很想知道如何做到这一点。

有什么想法吗?


完整的 .csproj 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{452FDE9A-EAFE-44EF-A7AD-34F287AE1664}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>AssemblyInfoTest</RootNamespace>
    <AssemblyName>AssemblyInfoTest</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <PlatformTarget>x86</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <PlatformTarget>x86</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>  
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

  <!--<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>-->
  <Import Project="$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
  <Import Project="$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.VersionNumber.targets"/>
  <PropertyGroup>
    <BuildDependsOn>
      AssemblyVersion;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>
  <ItemGroup>
    <AssemblyVersionFiles Include="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"/>
  </ItemGroup>
  <Target Name="AssemblyVersion" Inputs="@(AssemblyVersionFiles)" Outputs="UpdatedAssemblyVersionFiles">
    <Message Text="Setting AssemblyVersion..." Importance="High" />
    <AssemblyInfo
      SkipVersioning="true"
      AssemblyInfoFiles="%(AssemblyVersionFiles.FullPath)"
      AssemblyBuildNumber="12"
      AssemblyBuildNumberType="NoIncrement"
      AssemblyRevision="13"
      AssemblyRevisionType="NoIncrement"
      />
  </Target>
</Project>
4

1 回答 1

0

对这个问题的回答是:废弃扩展,使用 powershell 脚本在构建之前直接更新 AssemblyInfo 文件,作为 CI 的一部分。

遗憾。本来希望从头开始这项工作。但是这些扩展并不值得我为使它们工作而猛烈抨击它们。

于 2014-01-15T21:57:56.753 回答