首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSbuild构建订单问题-先构建前步骤或依赖项目优先

MSbuild构建订单问题-先构建前步骤或依赖项目优先
EN

Stack Overflow用户
提问于 2012-08-27 15:48:46
回答 4查看 7.5K关注 0票数 17

我有一个项目A依赖于项目B。当我在Visual中构建时,项目A有一些依赖于项目B生成的文件的预构建任务。但是当使用MSBuild.exe时,就会出现问题,因为构建顺序是:

  • A的预构建步骤<-失败,因为B尚未编译
  • B被编译<-预期将首先执行
  • A是编译的

这是使用MSBuild的预期行为吗?有没有办法让MSBuild在A的预构建步骤之前先做B?

我正在使用VS2010 C#和C++/CLI。我不认为是否提供了更多的信息,但以下是它的名称:

代码语言:javascript
运行
复制
Running process (C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBUILD.exe "..\..\..\dev\build\MyProj.sln" /t:Clean /p:Configuration=Release;Platform=Win32)
EN

回答 4

Stack Overflow用户

发布于 2013-05-01 16:59:56

短答案

删除构建事件,并向项目(.csproj)添加如下内容:

代码语言:javascript
运行
复制
<Target Name="AfterResolveReferences">
  <Exec Command="echo helloworld" />
</Target>

更多信息

您可以在这里阅读有关自定义构建过程的内容:http://msdn.microsoft.com/en-us/library/ms366724%28v=vs.110%29.aspx

以前的构建事件是在ResolveReferences之前触发的,因此如果您引用的项目到项目的BeforeBuild事件时还没有构建,那么您的BeforeBuild事件将失败。

要克服这一问题,您应该使用不同的入口点来自定义构建过程。在上面的例子中,我使用AfterResolveReferences,因为这将确保您引用的所有项目都已经构建好了。

票数 12
EN

Stack Overflow用户

发布于 2018-03-19 16:08:16

这是个老生常谈的问题,但我找到了这个简单的解决方案(它可能也适用于您),只需添加

代码语言:javascript
运行
复制
<PreBuildEventDependsOn>ResolveReferences</PreBuildEventDependsOn>

在此之前

代码语言:javascript
运行
复制
<PreBuildEvent>

不幸的是,这必须在编辑器中完成,VS编辑器不支持它(在15.6.2版)。

票数 11
EN

Stack Overflow用户

发布于 2013-08-16 22:37:38

杰克的回答似乎奏效了,但我不喜欢的是,在VS UI中,除了尴尬的“卸载项目,编辑项目(在这个项目中,您不能按通常希望的方式单击文件),Reload项目”模型之外,对编辑.csproj的支持并不是本机支持的。我想要的是构建前事件在构建依赖项目之后触发,并且在VS中使用与MSBuild中相同的工作。在努力解决这个问题之后,我找到了一个在MSBuild 4.0中适用于我的解决方案。

无论我尝试了什么,在依赖的项目完成构建后,我都无法更改PreBuildEvents目标以触发它。因此,我所做的是禁用PreBuildEvents目标,并创建一个可以在适当时间运行的私生子化的自定义PreBuildEvents目标:

代码语言:javascript
运行
复制
<ItemGroup>
  <ProjectReference Include="..\YourProjectPath\YourProject.csproj">
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  </ProjectReference>
</ItemGroup>
<Target Name="PreBuildEvent" AfterTargets="" BeforeTargets="" />
<Target Name="BastardPreBuildEvent" AfterTargets="ResolveReferences" BeforeTargets="CoreResGen">
  <Exec Command="$(PreBuildEvent)" />
</Target>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12145230

复制
相关文章

相似问题

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