13

我在构建期间自动生成了 AssemblyInfo.cs 文件。这是 .csproj 文件的一部分:

<PropertyGroup>
    <Major>2</Major>
    <Minor>3</Minor>
    <Build>0</Build>
    <Revision>0</Revision>
</PropertyGroup>
<Target Name="BeforeBuild">
    <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="C:\Program Files\VisualSVN Server\bin">
        <Output TaskParameter="Revision" PropertyName="Revision" />
    </SvnVersion>
    <AssemblyInfo CodeLanguage="CS" 
                  OutputFile="$(MSBuildProjectDirectory)\Properties\VersionInfo.cs" 
                  AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)" 
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"/>
</Target>

但是我不知道如何在 .csproj 文件之外指定MajorMinor属性,所以我不必每次想要更改版本时都卸载项目。我需要从项目内的特殊文本文件中加载它们,或者以某种方式在项目属性对话框中设置它们。有什么建议么?

4

5 回答 5

16

用于ReadLinesFromFile在单独的文件中制作版本:

<ReadLinesFromFile File="Properties\Version.txt">
    <Output TaskParameter="Lines" ItemName="Ver" />
</ReadLinesFromFile>
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="C:\Program Files (x86)\VisualSVN Server\bin">
    <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
<Message Text="Version: @(Ver).$(Revision)" />
<AssemblyInfo 
    CodeLanguage="CS" 
    OutputFile="$(MSBuildProjectDirectory)\Properties\VersionInfo.cs" 
    AssemblyVersion="@(Ver).$(Revision)" 
    AssemblyFileVersion="@(Ver).$(Revision)"/>
于 2011-06-09T16:01:25.010 回答
6

可以使用PropertyFunctions直接调用某些 .NET 函数的能力来执行此操作。本质上,您可以在设置属性值时调用File.ReadAllText() 。

<PropertyGroup>
    <Version>$([System.IO.File]::ReadAllText("Version.txt"))</Version>
</PropertyGroup>
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="C:\Program Files (x86)\VisualSVN Server\bin">
    <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
<Message Text="Version: $(Version).$(Revision)" />
<AssemblyInfo 
    CodeLanguage="CS" 
    OutputFile="$(MSBuildProjectDirectory)\Properties\VersionInfo.cs" 
    AssemblyVersion="$(Version).$(Revision)" 
    AssemblyFileVersion="$(Version).$(Revision)"/>

Version.txt 文件将只包含前三个版本号,即“1.2.3”或其他。

我不确定它是什么时候添加到 MSBuild 中的,但可能是在提出并回答了这个问题之后。

于 2020-07-08T06:32:35.240 回答
0

使用属性页,因此您可以在项目属性表对话框中设置这些属性。

您将需要创建一个属性文件并编辑您的项目文件(仅一次)以将导入指令添加到您的属性文件中。这是一个例子

于 2011-04-21T15:44:53.733 回答
0

您可以使用外部工具

<Exec Command="newversion incMinor AssemblyInfo.cs > newversion.log" /> 
于 2011-04-28T07:14:30.717 回答
0

如果您担心的是 VS 锁定了 csproj 文件,我对这个问题的回答 -如何在 Visual Studio 中关闭构建定义的缓存可能会对您有所帮助。

您可以将 BeforeBuild 任务的内容(包括版本属性组)移动到单独的 proj 文件中,并使用 MSBuild 任务调用它(使用上面链接答案中的示例生成的随机文件名)。这将允许您手动编辑您的版本号属性,而无需卸载/加载您的 csproj 文件。

于 2011-06-05T19:47:37.557 回答