为什么MSBuild不会在名称中使用点构建项目?

时间:2011-05-02 22:12:07

标签: msbuild

迄今为止的故事

我有一个很好的解决方案,包括桌面应用程序项目,一些库项目和一些开发工具项目(也是桌面应用程序)。目前,我的构建服务器将所有代码输出到一个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

但是,我们正在成长,我们团队以外的人希望访问我们的工具。所以我想组织输出。我决定我们想要的是每个可执行项目不同的OutputPath

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

我做了什么

我找到了这个简单的命令。我喜欢它,因为它保留了使msbuild痛苦的所有解决方案work-dir上下文。

msbuild /target:<ProjectName>

例如,从我的解决方案root作为工作目录,我会调用

PS> msbuild /target:Helper /property:OutputPath="$pwd\out\Helper"

我正在从PowerShell中对此进行测试,以便$pwd解析为我的工作目录的完整路径,或者在这种情况下解析为根。我得到了我想要的输出。

但是,当我运行此命令时

PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"

我收到以下错误输出(没有更多信息,我使用/verbosity:diagnostic运行)

  

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


我需要什么

命令在名称中带点或点的任何项目上失败。我尝试了许多工作目录和属性的组合。我尝试了几种逃避属性值的方法。我还尝试从目标文件中的<Task>运行命令。

我需要知道 A)如何将此命令修复为工作属性
B)如何以最小的摩擦力实现相同的输出

3 个答案:

答案 0 :(得分:33)

尝试使用下划线作为目标参数中点的转义字符,例如

msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"

答案 1 :(得分:0)

  

在-target:开关后指定目标,格式为:。如果项目名称包含任何字符%,$,@,;,。,(,)或',请在指定的目标名称中用_替换它们。

https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-build-specific-targets-in-solutions-by-using-msbuild-exe?view=vs-2019

Dan Nolan的答案和评论是正确的。只是想补充Microsoft文档。

答案 2 :(得分:-1)

/targets:开关用于标识要在项目文件中运行的<Target。您需要提供.csproj文件作为前缀为/xx选项标记的参数。

您可能还希望基于.sln文件工作。在这种情况下,您仍然不会在.sln中指定项目以此方式构建。我将让你搜索正确的语法,以防你最终做的事情。