【发布时间】: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