的MSBuild不拿起引用的项目的引用(MSBuild doesn't pick up re

2019-07-04 14:18发布

我刚才碰到了与MSBuild的一个奇怪的现象。 有这三个项目的解决方案:libx中,立白和EXE。 exe文件引用了libx。 libx中反过来引用立白,有一些内容文件,并且还引用第三方库(同时安装在GAC和地方lib文件夹几个预建的组件)。 第三方库被标记为“复制本地”(“私人”),并出现在了libx项目的输出,作为立白的产量和libx中的内容文件执行。 现在,EXE项目的输出具有libx中的项目输出,在libx中的项目的内容的文件,立白项目输出(从libx中推出),但没有第三方库的组件。

现在,我直接在Exe项目引用第三方库工作这么身边,但我不觉得这是一个“正确”的解决方案。

任何人有过这个问题吗?

Answer 1:

是的,我有这个问题了。 虽然我很想否则说了,我相信你必须包括所有传递依赖作为构建文件的引用。



Answer 2:

有伴的MSBuild的建设(即命令行,TFS建立和其他工具)相比,使用Visual Studio生成时是行为上的差异。 二级引用不包括在发送到的MSBuild编译任务的引用变量。

有通过的MSBuild提供改变引用是如何解决的几个扩展点。 我已经成功地使用AfterResolveReference来解决这个问题,我的一些项目- 我已经张贴了关于我的博客的背景更多信息 。

解决办法是进入你vbproj或的csproj文件添加以下代码

  <Target Name="AfterResolveReferences">
    <!-- Redefine referencepath to add dependencyies-->
    <ItemGroup>
     <ReferencePath Include="@(ReferenceDependencyPaths)">
     </ReferencePath>
    </ItemGroup> 
  </Target>

微软曾表示,这是一个不会在修复连接



Answer 3:

实际上,你可以进入Microsoft.CSharp.targets或Microsoft.VisualBasic.targets文件(位于框架目录,通常为C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本),并修改CSC或VBC任务参数包括附加的参考依赖关系。 在文件(VB目标,线166; C#目标,线164)的变化:\

References="@(ReferencePath)"

References="@(ReferencePath);@(ReferenceDependencyPaths)"

这可能会导致其他问题,取决于如何复杂的事情是,它可以与Visual Studio编译器进程内做手脚,但它是这样做的MSBuild的唯一办法,我已经找到。



Answer 4:

josant的回答几乎是为我工作; 我一直得到一个错误在Visual Studio时,我试过了:

尝试设置为IDE的进程编译“参考”参数时出现问题。 错误HRESULT E_FAIL已从调用返回至COM组件

我的问题的解决方案是把一个条件上的ItemGroup,就像这样:

<Target Name="AfterResolveReferences">
  <!-- Redefine referencepath to add dependencies-->
  <ItemGroup Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">
    <ReferencePath Include="@(ReferenceDependencyPaths)"></ReferencePath>
  </ItemGroup>
</Target>

导致Visual Studio来完全忽略参考变化,并构建工作正常本地和构建服务器上。



Answer 5:

我结合亚历克斯亚库宁的解决方案有一个会也复制原生的DLL 。



Answer 6:

如果你有一个有向图不能用“尝试部署的DLL的不同副本”错误树AfterResolveReferences方法失败。 (参见如何的MSBuild / MSVC配置部署相关组件的相关文件 )



文章来源: MSBuild doesn't pick up references of the referenced project