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 解释为同一事物。我建议您使用 .\
或 .
。
我有一个任务配置 属性 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 解释为同一事物。我建议您使用 .\
或 .
。