msbuild空属性值威胁为空值

msbuild空属性值威胁为空值,msbuild,msbuild-task,Msbuild,Msbuild Task,我有一个任务配置属性RelativePathOverride定义如下: <PropertyGroup> <RelativePathOverride>..\..\</RelativePathOverride> </PropertyGroup> 这个很好用。但是,问题是,当我为RelativePathOverride属性提供空值时,它默认为NULL <PropertyGroup> <RelativePat

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

  <PropertyGroup>
    <RelativePathOverride>..\..\</RelativePathOverride>
  </PropertyGroup>
这个很好用。但是,问题是,当我为
RelativePathOverride
属性提供空值时,它默认为
NULL

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

在我的逻辑中,我希望空值是空值!这非常重要,因为我们讨论的是相对路径
NULL
值表示未提供覆盖,因此默认值将硬编码为
。\
。但由于空属性值也被威胁为
null
,因此这会破坏我的逻辑

是否存在允许将空值传递到属性的本机方法


p、 另一方面(可能相关)-1空格也被视为
null

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

这种行为是经过设计的,没有人会去修复它,因为它将是一个破坏性的改变。。MS不想为此承担责任。“问题”可以解决。对于任何感兴趣的人,请尝试使用变通方法。。
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 = "..\\";
        }

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