我正在定制我的构建过程,我遇到了一种有趣的行为。使用字符串属性函数并更改某些字符串时,构建开始中断。
例如,我正在尝试做这件事:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Replace(";MyTarget", ""))</BuildDependsOn>
</PropertyGroup>
MyTarget 是我想从 BuildDependsOn 属性中删除的自定义目标。当我尝试执行此操作时,字符串似乎已正确删除,但我收到目标不存在的错误(这在 Visual Studio 2010 和命令行 MSBuild 中都会发生)。
错误如下:
The target "EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild" does not exist in the project.
我认为一旦我修改了这个属性,MSBuild 就会停止解析它的值,并试图寻找一个目标(包括空格、回车和新的换行符),称为:
"EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild"
并抛出该目标不存在的错误。
我还尝试执行一些更简单的操作以了解有关此问题的更多信息,并且我尝试执行此操作:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Trim())</BuildDependsOn>
</PropertyGroup>
该Trim()
功能也再次出现错误。任何想法?
编辑:我试图调试并找出问题,我遇到了这个:在方法BuildDependsOn
执行之前检查属性时Trim()
,它的值是这样的:
Value "BuildDependsOn"="\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n "
EvaluatedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
escapedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
方法之后Trim()
,属性值是这样的:
Value "BuildDependsOn"="EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild"
EvaluatedValue "EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild" string
escapedValue "EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild" string
可能是分号 (; <=> %3b) 破坏了构建?我怎样才能解决这个问题?