【问题标题】:VS2008 Prefers GAC reference to Assemblies in Solution FolderVS2008 优先 GAC 引用解决方案文件夹中的程序集
【发布时间】:2010-11-03 07:14:07
【问题描述】:

我在我的解决方案中使用了一些第 3 方库,并将这些库保存在一个名为 3rdParty 的单独的源代码控制文件夹中。我已经从 VS2008 IDE 添加了对这个文件夹中 DLL 的引用。但是,我发现在保存、关闭和打开解决方案后,引用已更改为指向 GAC 中的程序集。

使用 3rdParty 文件夹的原因是我可以轻松地从任何机器获取最新版本并构建我的项目,而无需在 GAC 文件夹中安装任何东西。如何让 VS2008 不影响我的参考文献?

编辑: 看到 Benjol 的回答后,我一直想知道是否可以使用程序集清单来解决此问题。这会帮助解决我的问题吗?

【问题讨论】:

  • 你确定,找零是VS佣人?我们正在使用相同的场景,我们没有问题。唯一的情况是,何时更改对 GAC 程序集的引用是第 3 方组件需要其他程序集时。
  • 是的。我验证了更改是由 VS 在保存时进行的。

标签: visual-studio-2008 assemblies reference gac


【解决方案1】:

即使您可以让 VS 查看您的本地文件夹,这在运行时(我的意思是 F5/调试运行时)也无济于事,因为 .Net 无论如何都会首先查看 GAC。

关于 CopyLocal,AFAIK,它只是告诉编译器将引用的 DLL 的一个版本复制到项目的 /bin 文件夹中,因此“复杂”路径不应该有任何问题。

【讨论】:

  • 有没有办法强制框架与应用程序在同一目录中查找?不能使用清单文件来执行此操作吗?
  • 简短回答,抱歉我不知道。长答案:尝试浏览这个批次:stackoverflow.com/search?q=gac+force+local
【解决方案2】:

引用有一个“CopyLocal”设置,如果您将其设置为 true 并将 SpecificVersion 设置设置为 false,那么它应该使用本地引用而不是 GAC 引用。

GAC dll 先于本地引用,因为它们旨在共享,但只有在指定特定版本时才应选择。

如果这些程序集继续导致问题,您是否可以从 GAC 中删除它们?

【讨论】:

  • mat1t,我的程序集位于 ..\..\3rdParty 的文件夹中,所以我认为 CopyLocal 无法自动找出文件夹名称。一些开发人员在 GAC 中可以使用有问题的 DLL,因为他们正在使用需要 GAC 引用的应用程序。删除 GAC 程序集可行,但也会给需要 GAC 参考的人带来问题。
【解决方案3】:

为了让它获取您的本地程序集,您必须进入项目属性,在“参考路径”选项卡下,并将本地目录(在您的情况下为第 3 方)添加到目录列表中。这应该可以解决您的问题。

【讨论】:

    【解决方案4】:

    我们在我工作的地方使用了类似的方法,尽管我们将文件夹命名为 ReferencedDLLs,到目前为止我们没有遇到任何问题。

    不过,您可以尝试的一件事是编辑项目文件以删除有问题的引用的PathHint,这样 VS2008 不知道在哪里查找,它将开始正常的方法。

    【讨论】:

    • Paulo,如何删除 PathHint?我在 UI 中找不到这个。
    • 我不在用户界面上。您需要卸载项目并手动编辑项目文件。
    • 我刚查了一下,项目文件中没有HintPath或PathHint属性。我猜 C++/CLI 项目的情况有所不同。
    • 另外,我相信我正在尝试做的事情只有在相关程序集尚未在 GAC 中时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多