我有一个项目根据项目B.项目A具有一定的预构建任务,依赖的一些当我建立在Visual Studio中,没有任何问题产生的从项目B.文件。 但是,使用MSBuild.exe时,那么就有问题,因为建造顺序是:
- A的预构建步骤< - 失败,因为B没有被编译
- B被编译< - 预期将首先执行
- A被编译
它是使用的MSBuild预期的行为? 有没有办法告诉的MSBuild先前的预生成步骤做B超?
我使用VS2010 C#和C ++ / CLI。 我不认为如果offeres额外的信息,但这里是它是如何调用:
Running process (C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBUILD.exe "..\..\..\dev\build\MyProj.sln" /t:Clean /p:Configuration=Release;Platform=Win32)
简答
删除您的构建活动,并添加类似以下到您的项目(.csproj的):
<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,因为这将确保你引用的所有项目都已经建成。
杰克的答案似乎是工作,但我不喜欢它是编辑的.csproj的支持本身并不在VS UI支持,比尴尬的“卸载项目等,编辑项目(在此期间,你不能按在你的文件,你通常想),刷新项目”的模式。 我想要的是在预生成事件内置相关项目后触发,并有这项工作中VS一样的MSBuild。 这个问题挣扎后,我发现,在4.0的MSBuild对我工作的解决方案。
不管是什么我想,我不能改变PreBuildEvents目标触发后因项目完成建设。 因此,我所做的却是禁用PreBuildEvents目标,并创建一个将在适当的时间运行bastardized定制PreBuildEvents目标:
<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>
这是相当古老的问题,但我发现这个简单的解决方案(可能为你申请过)只需添加
<PreBuildEventDependsOn>ResolveReferences</PreBuildEventDependsOn>
之前
<PreBuildEvent>
不幸的是这必须做编辑,VS编辑器不支持它(在15.6.2版本)。
这可能是老了,但我最近遇到了同样的问题。 杰克的答案是什么,我尝试使用,但在Visual Studio中加载的项目,这是对我不好 ,因为我是我的目标,我只是想在构建之前做的过程中做了相当长的过程,当ResolveReferences目标被调用。
我结束了使用的解决方案是类似于VeeTheSecond但有点较少涉及:
<Target Name="BeforeBuild" DependsOnTargets="ResolveReferences">
... exec something using a dependant project's output exe ...
</Target>
这会迫使BeforeBuild目标要等到所有相关的项目实际上完成了构建所以exec命令可以使用相关的项目的输出。
文章来源: MSbuild build order issue - pre-build steps first or dependent projects first