名称为句点的msbuild目标出现错误MSB4057

名称为句点的msbuild目标出现错误MSB4057,msbuild,Msbuild,我有一个UI可以在解决方案上调用msbuild,并且我希望能够选中UI中的一些框来指定在解决方案中生成哪些项目。我使用的msbuild如下所示: msbuild mysolution.sln /t:"proj1" /t:"proj2" 只要项目是字母数字的,一切都正常。但当我得到一个项目名称中有一个句号时: msbuild mysolution.sln /t:"ABC.XYZ" 我遇到这样一个错误(跳过一些与…无关的细节): 显然,在本例中,mysolution.sln中确实存在项目ABC.

我有一个UI可以在解决方案上调用msbuild,并且我希望能够选中UI中的一些框来指定在解决方案中生成哪些项目。我使用的msbuild如下所示:

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 = '_';