.net - .NET 运行时如何定位非强命名的程序集?

标签 .net assembly-resolution strongname

我们有不同版本的非强名称程序集,并且在 app.exe.config 中没有绑定(bind)重定向/探测路径到它们。例如,MyDll (1.0.0.0_null_neutral) 和 MyDll (2.0.0.0_null_neutral)。相对于 app.exe,这些程序集存储在 LAC\MyDll_1.0.0.0_null_neutral 和 LAC\MyDll_2.0.0.0_null_neutral 中。

我的理解是,因为 MyDll 程序集不是强命名的,.NET 运行时不会区分不同版本的 MyDll。因此,如果已将 MyDll 1.0.0.0 加载到内存中并且执行了针对 MyDll 2.0.0.0 构建的某些代码,则 .NET 运行时将不会加载 MyDll 2.0.0.0。

但是,当我使用 VS2008 附加到该进程并查看模块窗口时,我注意到 MyDll 1.0.0.0 和 MyDll 2.0.0.0 都是从 LAC 文件夹加载的。

我的理解似乎在某个地方存在差距。有人可以指出吗?

编辑:
感谢您到目前为止的回复。是的,我跳过了那一点。可执行文件监听 AssemblyResolve 事件,并通过查看 LAC 来处理它。

我很确定我之前看过一些 MSDN 文档,除非程序集是强命名的,否则这些版本会被忽略。我看看能不能挖出来

最佳答案

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

第 2 步是检查它是否已加载,这是特定于版本的,即使是没有强命名的项目。

第 4 步尝试通过探测加载程序集,这不是特定于版本的。

我感到困惑的是,如果您的配置文件中没有任何信息,那么首先如何找到 DLL?我认为我的理解也存在差距:-)。

关于.net - .NET 运行时如何定位非强命名的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252731/

相关文章:

.net-3.5 - 适用于 .NET 3.5 签名应用程序的 MEF

c# - 检查装配体的身份?可能是因为它的强大名称?

c# - 尝试通过用户点击来自动化 C# 解决方案的构建过程

asp.net-web-api - 无法加载文件或程序集“System.Web.Http,版本=5.0.0.0”

asp.net-mvc-4 - 无法使用 ASP.NET (MVC 4) Web API OData 预发行版加载文件或程序集 System.Net.Http,版本=4.0.0.0

c# - 从另一个文件夹解析程序集引用

.net - 从 3rd 方程序集中删除强名称?

c# - 无法从 C#.net 应用程序连接到 oracle 服务器

.net - WPF 中的 Setter 优先级重写?

c# - Google Oauth 2.0 redirect_uri_mismatch - 端口在回调时更改