【问题标题】:The Order of Assemblies Being Loaded正在加载的程序集的顺序
【发布时间】:2009-06-05 04:22:53
【问题描述】:

我有几个 .Net 程序集,版本相同,文件名相同,但位于不同的位置:

  1. 程序文件夹
  2. C:\Windows
  3. C:\Windows\system32
  4. 广汽

现在,首先加载哪个位置的程序集?

【问题讨论】:

    标签: .net assemblies


    【解决方案1】:

    .Net 程序集的搜索顺序与常规 Windows .dll 不同。只有当程序集被强命名为签名时,才会首先检查 GAC。如果程序集不在 gac / not strong name signed 中,则在此之后检查本地文件夹。也就是.net汇编搜索顺序结束,上面的1,2和3都没有勾选。

    您可以通过为您的应用提供本地配置文件来更改 .net 查找程序集的位置。

    另外,this post in the microsoft.public.dotnet.framework.aspnet group 包含非常有用的信息。

    【讨论】:

    • 可能值得用ProbingPath查找来更新它
    • “强命名签名”是指强命名并签名吗?
    【解决方案2】:

    这似乎是一个合理的解释:http://www.ondotnet.com/pub/a/dotnet/2003/03/17/bindingpolicy.html

    在 MSDN 上,以下内容也可能是相关的:http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

    【讨论】:

      【解决方案3】:

      C:\Windows 和 C:\Windows\System32 与托管程序集探测无关。框架不会在那里寻找程序集。

      如果在 App.Config 文件中指定,它首先在 GAC/Application Folder 中查找,然后在 codebase/privatepath 设置指向的文件夹中查找。 (只有强名称的程序集可以放在 GAC 中。) 在探测时,它通过附加 .dll 或 .exe 检查多个组合,查找名为 assembly.exe/.dll 的文件夹,并在需要时查找针对特定文化的程序集。

      Fusion Log Viewer 是查看运行时检查哪些文件夹是否存在程序集解析失败的好工具。在 VS 命令提示符处输入“fuslogvw”。它显示由 ApplicationName 和 Name 键入的条目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 2018-01-17
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多