msbuild empty 属性 值被威胁为空值

msbuild empty property value is threated as null value

我有一个任务配置 属性 RelativePathOverride 定义如下:

  <PropertyGroup>
    <RelativePathOverride>..\..\</RelativePathOverride>
  </PropertyGroup>

然后用作

  <Target Name="CustomTaskTarget" AfterTargets="PostBuildEvent">
    <SimpleTask RelativePathOverride="$(RelativePathOverride)"/> 
  </Target>

任务代码如下:

public class SimpleTask : Task
{
    public string RelativePathOverride { get; set; }
    

    public override bool Execute()
    {
        Log.LogMessage(MessageImportance.High, $"RelativePathOverride: {RelativePathOverride ?? "NULL"}");

        if (RelativePathOverride == null)
        {
            // default value
            RelativePathOverride = "..\";
        }

    }
}

这很好用。但是,问题是当我为 RelativePathOverride 属性 提供空值时,它默认为 NULL!

  <PropertyGroup>
    <RelativePathOverride></RelativePathOverride>
  </PropertyGroup>

按照我的逻辑 - 我希望空值是空值!这非常重要,因为我们正在谈论相对路径。 NULL 值意味着没有提供覆盖,因此默认值将被硬编码为 ..\。但是由于空 属性 值也被威胁为 null 那么这破坏了我的逻辑..

是否有允许将空值传递给 属性 的本机方法?

p.s。附带说明(可能相关)- 1 space 也受到威胁,因为 null..

在大多数情况下,msbuilds 中的比较通常将“空”和 null 解释为同一事物。我建议您使用 .\.