MSBuild 4.0属性函数无法访问其中的属性

时间:2011-09-20 21:20:22

标签: msbuild msbuild-4.0

MSBuild 4.0属性函数的限制是否无法从一个属性内部访问属性?

这是一个很好的例子:

<PropertyGroup>
  <PartialConnection>$(TargetConnectionString.Substring( 0 + 12))</PartialConnection>
</PropertyGroup>

这是另一个吸食鼻涕的例子。 (我将0替换为另一个属性)

<PropertyGroup>
  <LocationOfDataSource>$(TargetConnectionString.IndexOf("Data Source="))</LocationOfDataSource>
</PropertyGroup>
<Message Importance="high" Text="Location is = $(LocationOfDataSource)"/>
<PropertyGroup>
  <PartialConnection>$(TargetConnectionString.Substring( $(LocationOfDataSource) + 12))</PartialConnection>
</PropertyGroup>

此输出

  

位置= 0
  错误MSB4184:表达式“”数据源= MySQLServer;集成安全性= True; Pooling = False“.Substring(0 + 12)”无法评估。输入字符串的格式不正确。

我接受输出并插入控制台应用程序,它运行正常。我尝试了几种变体,当我在属性函数中放置一个属性时,它们总是会失败。 (我甚至尝试在我的属性函数中访问同一属性两次,但也失败了。)

属性函数不支持访问属性吗?

1 个答案:

答案 0 :(得分:2)

我认为我的问题是假设数学是免费的。

我需要做这样的事情:

<PropertyGroup>
  <LocationOfDataSource>$(TargetConnectionString.IndexOf("Data Source="))</LocationOfDataSource>
  <LenthOfDataSourceString>12</LenthOfDataSourceString>
  <LocationOfEndOfDataSourceString>$([MSBuild]::Add($(LocationOfDataSource), $(LenthOfDataSourceString)))</LocationOfEndOfDataSourceString>
  <PartialConnectionString>$(TargetConnectionString.Substring($(LocationOfEndOfDataSourceString)))</PartialConnectionString>
</PropertyGroup>

请注意,我在此版本中使用Add($(Property),$(Property))添加。

现在似乎正在运作。