名称为句点的msbuild目标出现错误MSB4057
我有一个UI可以在解决方案上调用msbuild,并且我希望能够选中UI中的一些框来指定在解决方案中生成哪些项目。我使用的msbuild如下所示:名称为句点的msbuild目标出现错误MSB4057,msbuild,Msbuild,我有一个UI可以在解决方案上调用msbuild,并且我希望能够选中UI中的一些框来指定在解决方案中生成哪些项目。我使用的msbuild如下所示: msbuild mysolution.sln /t:"proj1" /t:"proj2" 只要项目是字母数字的,一切都正常。但当我得到一个项目名称中有一个句号时: msbuild mysolution.sln /t:"ABC.XYZ" 我遇到这样一个错误(跳过一些与…无关的细节): 显然,在本例中,mysolution.sln中确实存在项目ABC.
msbuild mysolution.sln /t:"proj1" /t:"proj2"
只要项目是字母数字的,一切都正常。但当我得到一个项目名称中有一个句号时:
msbuild mysolution.sln /t:"ABC.XYZ"
我遇到这样一个错误(跳过一些与…无关的细节):
显然,在本例中,mysolution.sln中确实存在项目ABC.XYZ
这只是一个没有解决方法的bug吗?或者这是预期的行为,我需要以某种方式更改名称,以便msbuild理解我发送的内容?我在方法
静态私有字符串CleanseProjectName(string projectName)
的msbuild源代码中找到了解决方案:
我们可以看到,它会损坏目标名称,具体而言,它会替换:
private static readonly char[] charsToCleanse = { '%', '$', '@', ';', '.', '(', ')', '\'' };
与:
因此,像ABC.XYZ
这样的目标名称需要编码为ABC\u XYZ
,否则将找不到它
[2] :我在方法
静态私有字符串CleanseProjectName(string projectName)
中的msbuild源代码中找到了解决方案:
我们可以看到,它会损坏目标名称,具体而言,它会替换:
private static readonly char[] charsToCleanse = { '%', '$', '@', ';', '.', '(', ')', '\'' };
与:
因此,像ABC.XYZ
这样的目标名称需要编码为ABC\u XYZ
,否则将找不到它
[2] :
private const char cleanCharacter = '_';