首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >构建实用程序并在另一个项目的预构建中执行它。

构建实用程序并在另一个项目的预构建中执行它。
EN

Stack Overflow用户
提问于 2018-08-08 09:07:32
回答 2查看 731关注 0票数 0

场景

我希望有一个解决办法,其中包括:

  • 命令行应用程序(Utility.exe)
  • 类库(Library.dll)
  • 很多其他的东西需要建造

我想用msbuild构建整个解决方案。此外,我需要在类库的预构建事件中执行实用程序。

问题

将Utility.exe设置为Library.dll的项目依赖项是没有好处的,因为在构建依赖项目之前会调用预构建。

目前,我正在考虑在构建整个解决方案之前,只为Utility.exe调用msbuild。有没有更好/更清洁的解决方案?

编辑

相关:MSBuild build order

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-09 03:16:57

我需要在类库的预构建事件中执行实用程序。

如果要这样做,只需调用MSBuild.exe在类库的预构建事件中构建命令行应用程序(Utility.exe),如下所示:

代码语言:javascript
运行
复制
"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生成您的项目,您将不会遇到问题,在生成依赖项目之后将调用预生成。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-08-08 10:35:06

一种选择是将utility.exe作为单独的应用程序与它自己的构建过程一起构建。然后,此构建可以将二进制文件打包为nuget包,并将其存储在nuget存储库中(这可能只是一个文件共享)

一旦您有了可用的包,那么您就可以将它作为nuget引用添加到library.dll,并在构建过程中有一个额外的步骤,在构建步骤之前还原nuget包。然后,您的预构建事件可以从nuget packages文件夹中调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51742738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档