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>