【问题标题】:Referenced project dependency is copying from GAC instead of NuGet package folder引用的项目依赖项是从 GAC 而不是 NuGet 包文件夹复制的
【发布时间】:2016-05-27 23:09:30
【问题描述】:

我遇到了一个奇怪的问题,我有一个 Windows 服务项目 (A),它引用了解决方案 (B) 中的另一个项目。项目 B 引用了一个 nuget 包(在本例中为 protobuf-net);它正确引用了包文件夹中的路径。但是,当我构建 Windows 服务项目 A 时,被复制的 DLL 是不同的版本(来自 GAC)。

解决此问题的最佳方法是什么,并确保它正确复制了依赖项。

我尝试删除packages文件夹中的关联文件夹,然后重建Project B;这确实导致 nuget 再次自动下载文件,但是我看到 Visual Studio for Project B 中的引用已更新为 GAC 中的旧版本。我必须删除 packages.config 文件中的引用,然后使用 nuget 再次添加它以使其更新为使用 packages 文件夹中的正确路径。

【问题讨论】:

  • 旁注:除非有充分的理由将这些程序集放在 GAC 中,否则最好从 GAC 中卸载它们...通常通过 NuGet 分发的程序集应与应用程序和未安装。 GAC 始终优先加载程序集 - 因此,如果版本未正确递增,则从 GAC 复制将接管。
  • 是的,不确定该程序集为何或如何在 GAC 中结束。但是,nuget 包引用的是 v2.0.0,而 GAC 有 v1.0.0。至少可以说相当奇怪和烦人。
  • 更奇怪的是,还有另一个项目 (C) 引用了项目 B.. 并且它的构建/发布输出实际上包括所引用程序集的正确版本。只是这个项目似乎有问题。
  • 好吧,我只是为服务项目 (A) 设置了一个发布配置文件,你猜怎么着……“应用程序文件”文件夹包含正确版本的程序集。但构建没有。
  • 您是否有机会在您的应用配置中针对此特定程序集进行绑定重定向?

标签: c# visual-studio nuget


【解决方案1】:

我遇到了同样的问题,并通过将“复制本地”设置为 false 以在项目 A 中引用项目 B 来解决它。

就我而言,我所有的项目都有相同的输出路径。我有一个 EXE(项目 A)和一个 DLL(项目 B)。 DLL 具有对 Nuget 包的引用。当我只编译 DLL 时,它会将引用的 Nuget DLL 从包文件夹复制到输出文件夹。

但是,当我编译 EXE 时,它会用 GAC 的旧版本覆盖 Nuget DLL。 将“Copy Local”设置为 False 进行了修复,这样 Nuget DLL 仅在编译 DLL 时被复制,而不是在编译 EXE 时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多