我有一个很好的解决方案,包括桌面应用程序项目,一些库项目和一些开发工具项目(也是桌面应用程序).目前,我的构建服务器将所有代码输出到一个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
Run Code Online (Sandbox Code Playgroud)
但是,我们正在成长,我们团队以外的人希望访问我们的工具.所以我想组织输出.我决定我们想要的是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
...
Run Code Online (Sandbox Code Playgroud)
我找到了这个简单的命令.我喜欢它,因为它保留了所有解决方案work-dir上下文,这使得msbuild很痛苦.
msbuild /target:<ProjectName>
Run Code Online (Sandbox Code Playgroud)
例如,从我的解决方案root作为工作目录,我会打电话
PS> msbuild /target:Helper /property:OutputPath="$pwd\out\Helper"
Run Code Online (Sandbox Code Playgroud)
我正在从PowerShell中测试它,因此$pwd解析为我的工作目录的完整路径,或者在这种情况下解析为根目录.我得到了我想要的输出.
但是,当我运行此命令时
PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
Run Code Online (Sandbox Code Playgroud)
我得到以下错误输出(没有更多的信息,我跑了/verbosity:diagnostic)
项目中不存在目标"Company.MainApplication".
命令在名称中带有点或点的任何项目上都会失败.我尝试了许多工作目录和属性的组合.我尝试了几种逃避属性值的方法.我也尝试从<Task>目标文件中运行命令.
我需要知道
A)如何将此命令修复为工作属性
B)如何以最小的摩擦力实现相同的输出
Dan*_*lan 34
尝试使用下划线作为目标参数中点的转义字符,例如
msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
Run Code Online (Sandbox Code Playgroud)
小智 5
在 -target: 开关后指定目标,格式为 :。如果项目名称包含任何字符 %、$、@、;、.、(、) 或 ',请将它们替换为指定目标名称中的 _。
丹·诺兰的回答和评论是正确的。只是想补充一下微软的文档。
| 归档时间: |
|
| 查看次数: |
3816 次 |
| 最近记录: |