我有一个引用的DLL的EXE -在这个例子中,我会叫它TestDLL.dll。
该EXE是用C#和DLL是用VB写.NET。
我创建的DLL的演示程序集的版本 - 例如 - TestDLL.dll 1.0.0.0版。
我想编译EXE一起演示版本的DLL(1.0.0.0)的参考。 之后 - 我想要的EXE使用相同的DLL,但一个我会在GAC中,的任何版本。
为了做到这一点,我设置了DLL的引用的“复制本地”属性设置为FALSE。
我的目标是 - 例如编译后,我把在GAC TestDLL.dll与程序集版本2.1.6.0,和EXE将使用装配重定向绑定找到它。 对于这一点,我用了一个配置文件。 我用这个链接来创建它:
http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.71).aspx
所以我的配置文件看起来大约是这样的:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.1.6.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
问题是,尽一切后,我运行的EXE和访问DLL时,我得到了著名的错误信息:System.IO.FileNotFoundException:无法加载文件或程序集“TestDLL,版本= 1.0.0.0,文化=中立,公钥= 9d8162944bd6fdc7'或它的一个依赖。 该系统找不到指定的文件。 文件名: 'TestDLL,版本= 1.0.0.0,文化=中性公钥= 9d8162944bd6fdc7'
这意味着,该EXE无法找到原来的DLL我参考。 我知道我可以只是“参考”的GAC或使用反射,但我不希望 - 因为该EXE应该只工作这条路。
有谁知道是什么问题,如何解决?
谢谢