【发布时间】:2009-06-05 04:22:53
【问题描述】:
我有几个 .Net 程序集,版本相同,文件名相同,但位于不同的位置:
- 程序文件夹
- C:\Windows
- C:\Windows\system32
- 广汽
现在,首先加载哪个位置的程序集?
【问题讨论】:
标签: .net assemblies
我有几个 .Net 程序集,版本相同,文件名相同,但位于不同的位置:
现在,首先加载哪个位置的程序集?
【问题讨论】:
标签: .net assemblies
.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查找来更新它
这似乎是一个合理的解释:http://www.ondotnet.com/pub/a/dotnet/2003/03/17/bindingpolicy.html
在 MSDN 上,以下内容也可能是相关的:http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx
【讨论】:
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 键入的条目
【讨论】: