首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSBuild不会拾取被引用项目的引用

MSBuild不会拾取被引用项目的引用
EN

Stack Overflow用户
提问于 2008-09-26 01:14:28
回答 6查看 7.6K关注 0票数 14

我刚刚和MSBuild遇到了一个奇怪的情况。有一个解决方案包含三个项目: LibX、LibY和Exe。Exe引用LibX。LibX反过来引用了LibY,有一些内容文件,还引用了一个第三方库(在GAC和local lib文件夹中安装了几个预先构建的程序集)。第三方库被标记为"Copy Local“(”私有“),并出现在LibX项目的输出中,就像LibY的输出和LibX的内容文件一样。现在,Exe项目的输出有LibX项目输出、LibX项目的内容文件、LibY项目输出(来自LibX),但没有第三方库的程序集。

现在,我通过在Exe项目中直接引用第三方库解决了这个问题,但我觉得这不是一个“正确”的解决方案。

以前有人遇到过这个问题吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-26 15:28:47

是的,我也遇到过这个问题。尽管我想说的不是这样,但我相信您必须在构建文件中包含所有可传递的依赖项作为引用。

票数 2
EN

Stack Overflow用户

发布于 2012-02-17 20:02:20

与使用Visual Studio构建相比,使用MSBuild (即命令行、TFS构建和其他工具)构建时的行为有所不同。辅助引用不包括在发送到MSBuild编译任务的引用变量中。

MSBuild提供了几个扩展点来更改引用的解析方式。对于我的一些项目-- I have posted more info about the background on my blog,我已经成功地使用AfterResolveReference解决了这个问题。

解决方法是将以下代码添加到vbproj或csproj文件中

代码语言:javascript
运行
复制
  <Target Name="AfterResolveReferences">
    <!-- Redefine referencepath to add dependencyies-->
    <ItemGroup>
     <ReferencePath Include="@(ReferenceDependencyPaths)">
     </ReferencePath>
    </ItemGroup> 
  </Target>

微软表示,这是Connect上的一个不会修复的问题

票数 12
EN

Stack Overflow用户

发布于 2008-10-02 20:27:58

实际上,您可以进入Microsoft.CSharp.targets或Microsoft.VisualBasic.targets文件(位于框架目录中,通常是C:\Windows\Microsoft.NETFrameworkv3.5),并修改csc或vbc任务参数以包括其他引用依赖项。在文件(VB目标,第166行;C#目标,第164行)中,更改:\

代码语言:javascript
运行
复制
References="@(ReferencePath)"

代码语言:javascript
运行
复制
References="@(ReferencePath);@(ReferenceDependencyPaths)"

这可能会导致其他问题,这取决于事情有多复杂,它可能会使用Visual Studio inproc编译器,但这是我在MSBuild中找到的唯一方法。

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

https://stackoverflow.com/questions/137229

复制
相关文章

相似问题

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