我在C#中使用Windows窗体应用程序。我需要使用下面的dll。
Interop.SHDocVw.dll
问题是我需要引用同一个程序集的两个不同版本。
我尝试将dll保存在两个不同的位置&试图添加但不允许。
按照以下链接,我尝试在运行时加载两个版本的程序集,但不知何为不知道我该怎么做。
https://www.codeproject.com/Tips/373589/Load-same-assemblies-with-different-versions
这就是我的app.config的样子: -
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Interop.SHDocVw.dll" publicKeyToken="db7cfd3acb5ad44e" />
<codeBase version="1.1.0" href="...\watin-core\Interop.SHDocVw.dll"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Interop.SHDocVw.dll" publicKeyToken="632609b4d040f6b4" />
<codeBase version="1.3.0" href="...\winforms\Interop.SHDocVw.dll"/>
</dependentAssembly>
目前它抛出的例外: -
System.IO.FileLoadException: Could not load file or assembly 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral,
PublicKeyToken=null'
at myApp.AppUI.InitializeComponent()
我该如何解决这个问题?
答案 0 :(得分:1)
,如http://geekswithblogs.net/narent/archive/2008/11/11/126940.aspx:
1)编辑csproj文件(右键单击解决方案资源管理器中的项目,然后卸载项目,然后修改csproj文件)
2)在这个csproj文件中,添加包含Reference标签的ItemGroup: (这里是Office Interop 15和16的示例)
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll</HintPath>
<Aliases>Test2</Aliases>
<Private>False</Private>
</Reference>
和
<Reference Include="Microsoft.Office.Interop.Excel, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<HintPath>C:\Program Files (x86)\Microsoft Office\root\Office16\DCF\Microsoft.Office.Interop.Excel.dll</HintPath>
<Aliases>Test1</Aliases>
<Private>False</Private>
</Reference>
如您所见,我添加了别名:Test1和Test2
3)然后,重新加载项目并在.NET代码中添加代码的第一行(在任何“使用”之前):
extern alias Test1;
extern alias Test2;
然后在您的代码中,您可以使用具有2个不同版本的相同程序集:
Test1.Microsoft.Office.Interop.Excel.Application app1;
Test2.Microsoft.Office.Interop.Excel.Application app2;
答案 1 :(得分:-1)
我想当你说 - “你可以并排运行两个不同版本的同一个程序集”意味着你可以将两个版本的程序集加载到同一个应用程序域中。
这意味着在您的申请中:
Assembly1(假设你将cs proj命名为Assembly1)可以引用Interop.SHDocVw.dll 1.1版本
和Assembly2((假设你将你的cs proj命名为Assembly2)可以引用Interop.SHDocVw.dll的1.3版本。
你的最终o / p目录将包含Assembly1.dll,Assembly2.dll和两个版本的Interop.SHDocVw.dll。