如何简化MSBuild目标? $(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::替换(“%(ProtocCompile.RelativeDir)”,“\.\.[/\\]',”)

如何简化MSBuild目标? $(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::替换(“%(ProtocCompile.RelativeDir)”,“\.\.[/\\]',”),msbuild,Msbuild,这是目标文件的一部分。如何简化此代码?如何减少下面字符串的重复 $(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::替换('%(ProtocCompile.RelativeDir)'.\.\.[/\\]','') 因为您已经为该值指定了如下属性: <PropertyGroup> <protooutdir>$(IntermediateOutputPath)$([System.Text.

这是目标文件的一部分。如何简化此代码?如何减少下面字符串的重复

$(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::替换('%(ProtocCompile.RelativeDir)'.\.\.[/\\]','')

因为您已经为该值指定了如下属性:

  <PropertyGroup>
  <protooutdir>$(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::Replace('%(ProtocCompile.RelativeDir)','\.\.[/\\]',''))</protooutdir>
  </PropertyGroup>

$(IntermediateOutputPath)$([System.Text.RegularExpressions.Regex]::替换(“%(ProtocCompile.RelativeDir)”,“\.\.[/\\]',”)
您可以使用属性$(protooutdir)替换对该字符串的引用,如下所示:




谢谢。我认为$(protooutdir)可以在的范围内访问。是否所有属性和项都存在于全局范围内?如何修复属性“protooutdir”和属性“Outputs”之间的重复?我认为,如果在其他目标之前调用ProtobufCompile目标,那么其他目标将能够访问它。但是,您始终可以在目标之外定义protooutdir属性,使其成为全局属性。
<CreateItem Include="$(protooutdir)%(ProtocCompile.Filename).cs">
<Delete Files="$(protooutdir)%(ProtocCompile.Filename).cs" />