为什么赢了';t MSBuild是否生成名称中带有点的项目? 到目前为止的故事

为什么赢了';t MSBuild是否生成名称中带有点的项目? 到目前为止的故事,msbuild,Msbuild,我有一个很好的解决方案,包括一个桌面应用程序项目、几个库项目和几个开发工具项目(也是桌面应用程序)。目前,我的构建服务器将所有代码输出到一个OutputPath。因此,我们以 drop-x.y.z\ Company.MainApplication.exe <-- main application Company.MainApplicationCore.dll <-- libraries Helper.exe

我有一个很好的解决方案,包括一个桌面应用程序项目、几个库项目和几个开发工具项目(也是桌面应用程序)。目前,我的构建服务器将所有代码输出到一个
OutputPath
。因此,我们以

drop-x.y.z\  
  Company.MainApplication.exe      <-- main application   
  Company.MainApplicationCore.dll  <-- libraries  
  Helper.exe                       <-- developer tools  
  Grapher.exe  
  Parser.exe  
  ...                              <-- the rest of the output

我所做的 我发现了这个简单的命令。我喜欢它,因为它保留了使msbuild成为麻烦的所有解决方案工作目录上下文

msbuild /target:<ProjectName>
我正在PowerShell中进行测试,以便
$pwd
解析为我的工作目录的完整路径,或者在本例中解析为解决方案根目录。我得到了我想要的输出

但是,当我运行此命令时

PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
我得到以下错误输出(没有更多信息,我使用
/verbosity:diagnostic
运行)

项目中不存在目标“Company.MainApplication”


我需要什么 对于名称中带有一个或多个点的任何项目,该命令都会失败。我尝试了许多工作目录和属性的组合。我尝试了几种逃避属性值的方法。我还尝试从目标文件中的
运行该命令

我需要知道其中一个
A)如何将此命令修复为工作属性

B)如何以最小的摩擦实现相同的输出

目标:开关用于识别一个
尝试使用下划线作为目标参数中点的转义字符,例如

msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
以以下格式指定-target:开关后的目标:。如果项目名称包含%、$、@、;、.、.中的任何字符。,(,)或',将它们替换为指定目标名称中的u


丹·诺兰的回答和评论是正确的。只是想补充一下Microsoft文档。

关于这一点的公认答案表明我使用了
/target:ProjectName
开关是正确的。注意:使用解决方案根目录作为工作目录,此命令
msbuild/target:ProjectName
msbuild MySolution.sln/target:ProjectName
@AnthonyMastrean相同,非常感谢您的反馈;我接受这一点。我从未听说过这种机制(当时我读过很多文章和Hashimi的书)-如果有人能找到doc的链接,我会非常感激。我非常感激这个正确的答案,但是为什么,为什么,为什么这是答案!好问题!我之所以知道这一点,是因为TeamCity中传递到MsBuild的所有系统属性都使用下划线代替点。例如,Ant中的{build.vcs.number.1}在MsBuild中变成$(build_vcs_number_1)。也许MSFT刚刚决定点应该成为保留字符,因为itemgroup引用的语法,例如%myItem.filename%
PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"