检查 PropertyGroup 项目是否设置为 .csproj 中的值

Check if PropertyGroup item is set to a value in .csproj

我正在使用 .targets 文件在 .csproj 文件中包含常用功能。

在目标文件中,我想检查之前是否设置了一个属性,如果是,则不要重新设置。

我需要这个,因为我在许多解决方案中都使用了特定的目标文件,并且我想包含自定义 属性 只有在之前没有设置的情况下。

我说的属性是

<PropertyGroup> <CodeAnalysisRuleSet>$(SolutionDir)CustomizedAllRules.ruleset</CodeAnalysisRuleSet> </PropertyGroup>

如果在导入目标文件之前指定了此规则集,我不想将其再次包含在 .targets 文件中。

如果之前设置了 <CodeAnalysisRuleSet>...</CodeAnalysisRuleSet>,我该如何签入 .csproj?

我最常看到的模式是根据与空值的比较来有条件地设置它:

<PropertyGroup>
    <CodeAnalysisRuleSet Condition="'$(CodeAnalysisRuleSet)' == ''">$(SolutionDir)CustomizedAllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

[编辑:用代码示例回复评论]

这是一个对我有用的更长的例子:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <PropertyValue Condition="$(PropertyValue) == ''">Default value</PropertyValue>
    </PropertyGroup>
    <Target Name="Build">
        <Message Text="$(PropertyValue)" />
    </Target>
</Project>

给出控制台输出:

Project "D:\temp\test.proj" on node 1 (default targets).
Build:
  Default value
Done Building Project "D:\temp\test.proj" (default targets).