C#装配位置解析

C#装配位置解析,c#,.net-4.0,assemblies,C#,.net 4.0,Assemblies,我有一个使用Microsoft.SqlServer.SMO.dll的项目,它总是复制到bin目录(CopyLocal设置为true) 但是,可能会安装不同版本的SQL SMO。它们有相同的程序集版本(10.0.0.0),但有不同的文件版本(10.0.1600.22和10.50.2500.0)。最终用户可能已将较旧版本的程序集安装到GAC,但我需要始终从bin加载10.50 因此,我有以下情况: Bin -> 10.50.2500.0 GAC -> 10.0.1600.22 当我的应

我有一个使用Microsoft.SqlServer.SMO.dll的项目,它总是复制到bin目录(CopyLocal设置为true)

但是,可能会安装不同版本的SQL SMO。它们有相同的程序集版本(10.0.0.0),但有不同的文件版本(10.0.1600.22和10.50.2500.0)。最终用户可能已将较旧版本的程序集安装到GAC,但我需要始终从bin加载10.50

因此,我有以下情况:

Bin -> 10.50.2500.0
GAC -> 10.0.1600.22
当我的应用程序运行时,加载来自GAC的程序集,忽略来自bin的程序集


我怎样才能防止这种行为?非常感谢。

您可以为应用程序提供自己的清单,告诉它您希望显式使用“bin”位置。这是一个中等规模的话题,但这是一个很好的链接,可以让你开始


这都是关于严格的版本控制。您正在引用版本为10.50.2500.0的dll,但并没有说它应该是这个版本


所以,您需要做的是在引用的程序集的属性中将特定版本设置为true。这将保证准确加载此版本

强键入与引用程序集的特定版本有什么关系?CLR只关注[AssemblyVersion],忽略文件版本。所以GAC中的那个总是首先被发现并被接受。如果这真的很重要,你必须卸载它。