场景
我希望有一个解决办法,其中包括:
我想用msbuild构建整个解决方案。此外,我需要在类库的预构建事件中执行实用程序。
问题
将Utility.exe设置为Library.dll的项目依赖项是没有好处的,因为在构建依赖项目之前会调用预构建。
目前,我正在考虑在构建整个解决方案之前,只为Utility.exe调用msbuild。有没有更好/更清洁的解决方案?
编辑
发布于 2018-08-09 03:16:57
我需要在类库的预构建事件中执行实用程序。
如果要这样做,只需调用MSBuild.exe在类库的预构建事件中构建命令行应用程序(Utility.exe),如下所示:
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "$(ProjectDir)..\UtilityApplication\UtilityApplication.csproj" /p:Configuration=$(Configuration) /p:Platform=$(Platform)
"$(ProjectDir)..\UtilityApplication\bin\Debug\UtilityApplication.exe"注意:不要使用$(SolutionDir)而不是$(ProjectDir)..\ (问题的根本原因也与此有关,让我解释一下。)
原因
解决方案包含项目,但是项目可以是多个不同的解决方案(或者根本没有解决方案),因此当单独构建一个项目时,不能访问解决方案信息。这就是为什么我们在构建项目$(SolutionDir)时不能使用UtilityApplication.csproj的原因。
这也是导致您的问题的罪魁祸首,因为项目参考信息只存在于解决方案信息中。因此,如果您生成您的解决方案文件或从Visual生成您的项目,您将不会遇到问题,在生成依赖项目之后将调用预生成。
希望这能有所帮助。
发布于 2018-08-08 10:35:06
一种选择是将utility.exe作为单独的应用程序与它自己的构建过程一起构建。然后,此构建可以将二进制文件打包为nuget包,并将其存储在nuget存储库中(这可能只是一个文件共享)
一旦您有了可用的包,那么您就可以将它作为nuget引用添加到library.dll,并在构建过程中有一个额外的步骤,在构建步骤之前还原nuget包。然后,您的预构建事件可以从nuget packages文件夹中调用。
https://stackoverflow.com/questions/51742738
复制相似问题