Directory.build.props中“ PropertyGroup”的条件不起作用

时间:2019-02-05 13:45:20

标签: msbuild

我已经创建了Directory.build.props文件,因此可以在其中设置C#语言版本。 但是我也有Visual Basic项目,所以我想将设置限制为C#项目。

<Project>
    <PropertyGroup Condition="'$(ProjectExt)'=='.csproj'">
        <LangVersion>7.2</LangVersion>   
    </PropertyGroup>
</Project>

但是我的项目没有加载它/ UI没有显示语言版本7.2。 我试图在csproj文件中应用相同的条件,也无法正常工作。

<PropertyGroup>
    <LangVersion Condition="'$(ProjectExt)'=='.csproj'">7.2</LangVersion>
</PropertyGroup>

但是,这将起作用:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Message Text="Condition working" Importance="high" Condition="'$(ProjectExt)'=='.csproj'"/>
</Target>

版本将输出我的消息

为什么该条件不适用于我的LanguageVersion?有线索吗?

1 个答案:

答案 0 :(得分:1)

您将需要使用一个属性来限制在构建的早期就可用的属性。在您的情况下,您应该以{{1​​}}为条件:

MSBuildProjectExtension

有关可用属性的完整集合,请参见MSBuild reserved and well-known properties

<PropertyGroup> <LangVersion Condition="'$(MSBuildProjectExtension)'=='.csproj'">7.2</LangVersion> </PropertyGroup> 仅在构建定义的后期定义,因此在ProjectExt中不可用,后者很早就导入到项目中。