如何从外部文件中读取属性值?

Pom*_*oma 10 msbuild build-process build csproj

我在构建期间自动生成了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>
Run Code Online (Sandbox Code Playgroud)

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

Pom*_*oma 15

用于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)"/>
Run Code Online (Sandbox Code Playgroud)

  • Verion.txt 文件是什么样的? (3认同)

小智 10

可以使用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)"/>
Run Code Online (Sandbox Code Playgroud)

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

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