我正在做一个大型项目。有许多嵌入式组件都内置在同一个解决方案文件中。每个组件都有一个构建后事件,可以将自身复制到可执行文件的bin文件夹中,以便可执行文件动态加载它。
我可以在GUI中创建一个只构建我关心的项目的配置,这在我的PC上的GUI中运行良好。构建所有组件,并将自身复制到正确的文件夹。 ...但它没有转移到其他PC,也没有转移到命令行,所有组件都在这里建立。 (启用/禁用状态是否存储在.suo而不是.sln?)
MSBuild "MegaSolution.sln" /p:Configuration="Limited Release"
如果我删除post-build命令并在命令行上指定OutDir,OutputPath和SolutionDir,我可以从命令行一次构建一个.csproj文件...
MSBuild "MyComponent.csproj" /t:Build /p:Configuration="Limited Release";OutDir="..\..\%outdir%";OutputPath="..\..\%outdir%";SolutionDir="..\.."
...但是由于缺少xcopies,GUI构建被破坏了。
然后我尝试创建一个全新的解决方案文件。将我的项目特定解决方案文件放在项目文件夹中会导致后构建命令中的相对路径出现进一步问题,因此我将解决方案放在与主要解决方案相同的级别,这在GUI输出中非常有效,但是在控制台中使用了项目输出到错误的文件夹:
从GUI构建输出窗口:
Architecture -> C:\...\Architecture\bin\Release\Architecture.dll
Launcher -> C:\...\Launcher\bin\Release\TestApp.exe
从命令行:
MSBuild "MyProjectStandalone.sln" /p:Configuration="Release"
Architecture -> C:\...\Architecture\Launcher\bin\Release\Architecture.dll
Launcher -> C:\...\Launcher\Launcher\bin\Release\TestApp.exe
在搜索" Launcher"后,我找不到对此行为的探索。在解决方案文件夹中的所有文件中。
我尝试用输出路径替换xcopies,但是你不能使用OutputPath中的SolutionDir或Configuration变量来一次编辑这两个配置,它们被用作纯文本。
C:\...\bin>dir
Volume in drive C has no label.
Volume Serial Number is 2019-00D7
Directory of ...\bin
03/24/2015 08:52 PM <DIR> .
03/24/2015 08:52 PM <DIR> ..
03/24/2015 08:52 PM <DIR> $(Configuration)
03/24/2015 08:49 PM <DIR> Debug
03/24/2015 08:52 PM <DIR> Release
0 File(s) 0 bytes
5 Dir(s) 101,571,932,160 bytes free
我尝试在每个项目/配置中对OutDir进行硬编码以替换xcopy,然后在msbuild调用解决方案中对OutDir进行硬编码。输出文件夹是相对于正在构建的项目而不是解决方案文件夹,因此使用下面的命令,一个依赖树将转到..\..\output
,而另一个依赖树转到..\..\..\output
MSBuild "MyProjectStandalone.sln" /p:Configuration="Release";OutDir="..\..\..\..\output"
我能够通过删除所有xcopies并使用与该项目相关的硬编码OutDir分别编译每个项目来实现它,但我希望这样可以使用解决方案文件。