我有一个很好的解决方案,包括桌面应用程序项目,一些库项目和一些开发工具项目(也是桌面应用程序)。目前,我的构建服务器将所有代码输出到一个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)如何以最小的摩擦力实现相同的输出
答案 0 :(得分:33)
尝试使用下划线作为目标参数中点的转义字符,例如
msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
答案 1 :(得分:0)
在-target:开关后指定目标,格式为:。如果项目名称包含任何字符%,$,@,;,。,(,)或',请在指定的目标名称中用_替换它们。
Dan Nolan的答案和评论是正确的。只是想补充Microsoft文档。
答案 2 :(得分:-1)
/targets:
开关用于标识要在项目文件中运行的<Target
。您需要提供.csproj文件作为不前缀为/xx
选项标记的参数。
您可能还希望基于.sln文件工作。在这种情况下,您仍然不会在.sln中指定项目以此方式构建。我将让你搜索正确的语法,以防你最终做的事情。