2010-06-04 52 views
5

通过MSDN文章How the Runtime Locates Assemblies读,也读this后,我仍然不确定如何弱命名程序集在运行时得到解决。.NET程序集解决混乱

例如,如果我在项目中引用了某个dll文件,我就编译和部署,如果我只是替换在编译时实际引用的旧文件,它是否会选取新版本的引用的dll文件?如果项目文件中的引用指定了引用程序集的版本等,是否重要?

任何启示欢迎

回答

0

回答你的问题是肯定的,只要只要你有Specific Version设置为False在为参考装配的属性。

+0

这是不正确的,它只适用于编译时。 – 2010-06-04 10:02:54

1

我发现,了解这是Grimes的融合研讨会作为可以发现here最好的地方。这是非常全面的,但仍然容易理解。

0

如果版本没有提到它会拿起参考,如果版本提到它会尝试找到并加载程序集匹配的版本中提到的签名。如果没有找到它会抛出异常。要解决此问题,您可以执行程序集绑定重定向。

2

如果在GAC中没有找到组件,然后CLR将在“探测路径”进行搜索。默认情况下,它只是包含EXE的目录。它仅查找程序集名称上的匹配项,并停止搜索第一个匹配项。

它接着检查[的AssemblyVersion]号码。如果不匹配,你会得到一个异常,它不会继续寻找具有相同名称的另一个程序集。无论何时遇到解决方法问题,您都需要使用Fuslogvw.exe实用程序。它向你展示了CLR究竟在哪里以及哪里出了问题。

+0

弱引用是否会影响版本号?我的经验是,如果您处于探索路径中,它只是按名称匹配(不确定GAC,但不会太弱)。 – 2010-06-04 10:08:05

+1

是否强名与否无关紧要。只有GAC能够通过版本号解析引用的程序集。探测路径搜索只能通过名称完成,发现程序集后仍会检查版本号。 – 2010-06-04 10:43:50