MSBuild构建解决方案指定项目时含点号的文件夹路径无法正确识别
MSBuild 构建解决方案内指定项目的正确规则
实际操作时碰到的规则表现
- 文档中提到的「项目名的
.替换为_」规则,仅对项目名称本身有效,不会作用于文件夹路径部分:执行msbuild Solution.sln /t:"Folder\Project1_Name"可正常构建路径为Folder\Project1.Name.csproj的项目 - 直接在目标参数中传入带
.的文件夹路径会触发运行时异常:执行msbuild Solution.sln /t:"Folder.Name\Project2"构建路径为Folder.Name\Project2.Name.csproj的项目时,会抛出未处理参数异常:
Unhandled Exception: System.ArgumentException: The name "Folder.Name\Project2" contains an invalid character ".".
- 全量将路径、项目名中的
.替换为下划线的操作不生效:执行msbuild Solution.sln /t:"Folder_Name\Project2_Name"会触发目标不存在的编译错误:
error MSB4057: The target "Folder_Name\Project2_Name" does not exist in the project.
可落地的操作方法
解决方案层级的项目目标名,是MSBuild解析.sln文件时动态生成的,没有固定的手动拼接、字符替换规则,不需要自行转换路径或项目名里的字符。
仅需执行不带/t参数的msbuild Solution.sln,在初始化阶段的输出日志中找到对应项目注册的原生目标名称,将这串名称作为/t参数值传入即可。
针对文件夹名本身带.的场景,日志里展示的目标名会自动完成字符兼容处理,手动替换字符反而会造成目标名和实际注册值不匹配,触发MSB4057报错。
内容的提问来源于stack exchange,提问作者WinBoss
相关产品推荐
相关产品推荐

