至今为止的故事
我有一个不错的解决方案,其中包括一个桌面应用程序项目、几个库项目和一些开发工具项目(也是桌面应用程序)。目前,我的构建服务器将所有代码输出到一个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变得麻烦。
msbuild /target:<ProjectName>
例如,以我的解决方案根目录作为工作目录,我会调用: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”。
我需要什么
该命令在任何名称中带有一个或多个点的项目上失败。我尝试了许多工作目录和属性组合。我尝试了几种转义属性值的方法。我还尝试从一个targets文件中的<Task>
运行该命令。
我需要知道:
A)如何修复此命令以使其正常工作
B)如何以最小的障碍获得相同的输出