我有一个引用 DLL 的 EXE——在本例中,我将其命名为TestDLL.dll。
EXE 用 C# 编写,DLL 用 VB .Net 编写。
我创建了 DLL 的演示程序集版本 - 例如 - TestDLL.dll 版本 1.0.0.0。
我想参考演示版 DLL (1.0.0.0) 来编译 EXE。之后 - 我希望 EXE 使用相同的 DLL,但我将放入 GAC 中的任何版本。
为此,我将DLL 引用的“复制本地”属性设置为FALSE。
例如,我的目标是 - 编译后,我将使用程序集版本 2.1.6.0 放入 GAC TestDLL.dll,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, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9d8162944bd6fdc7' 或其依赖项之一。该系统找不到指定的文件。文件名:'TestDLL,版本=1.0.0.0,文化=中性,PublicKeyToken=9d8162944bd6fdc7'
意思是,EXE 找不到我引用的原始 DLL 。我知道我可以“引用” GAC 或使用反射,但我不想——因为这个 EXE 应该只能以这种方式工作。
有谁知道问题出在哪里以及如何解决?
谢谢