【问题标题】:Where assemblies are loaded from?从哪里加载程序集?
【发布时间】:2014-11-28 13:35:01
【问题描述】:

我们有天蓝色的服务。它的解决方案包括几个项目。一些项目引用了 azure.storage 版本。 4.2.1。基于 nugget.org,azure.storage 的依赖项是 odata、edm 等 >= 5.6.0。我们想用最新的一个5.6.3。因此,我们在项目中添加了对 5.6.3 版中所有依赖程序集的引用(尽管 ILSPY 显示依赖项适用于 5.6.0 版)。但不幸的是,加载的 dll 来自 gac,版本为 5.6.0。 (不是来自我们用最新版本引用的路径) dll是如何加载的?:

  1. 基于 Force load an assembly from the /bin and not the GAC?http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx - 它从 GAC firstable 加载程序集
  2. 基于 http://blogs.msdn.com/b/manishagarwal/archive/2005/09/28/474769.aspx 和 Microsoft.Common.CurrentVersion.targets,它应该首先在 bin 目录中查找 - 而不是 gac。

什么是正确的?以及我如何(完全)实现我尝试做的事情?

【问题讨论】:

    标签: c# asp.net azure nuget gac


    【解决方案1】:

    您将编译程序集的解析与执行程序集的解析进行比较。

    你的观点和他们的参考都是真实的,但仅限于他们的具体情况。您的 #2 参考资料解释了编译过程程序集解析,您的 #1 参考资料讨论了执行过程。

    【讨论】:

    • 谢谢。我还有一个问题 - 我可以在执行期间强制执行我希望的版本,而不是 GAC 中找到的版本吗?
    • 你可以处理AssemblyResolve事件。
    • 谢谢。如果不使用程序集解析器但信任 GAC - 我应该将 azure.storage 4.1.2 的所有依赖项添加到 csproj 吗? nugets(packages.config)呢?
    • 您永远不应该相信 GAC。将这些添加到您的项目中可能确实是最好的。
    • @为什么它可能是最好的?要添加什么版本 - 我更喜欢添加最新版本。 - 它将用于编译。但之后在执行期间加载时,将采用版本较少的 dll....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2023-03-10
    • 2021-04-03
    • 2010-10-30
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多