在我的asp.net应用程序中引用程序集Microsoft.Office.Interop.Word时出现以下错误。
“Microsoft.Office.Interop.Word.ApplicationClass”类型同时存在
C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Word\11.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll
和
C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Word\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll
以前,我收到错误但12.0.0.0在Visual Studio下的PIA目录中,但错误消息是相同的,除了指向不同的路径。从那时起,我将dll复制到GAC,但出现了同样的错误。
我认为.Net应该照顾这个。谁能给我一些帮助?
BTW,我是使用Visual Studio .Net 2008
这样做的答案 0 :(得分:0)
这来自previous answer,但包含了相关信息,以防链接腐烂的引用死亡:
Problems with Primary Interop Assembly Versioning:使用.config文件和程序集绑定重定向,我终于能够摆脱最初报告的异常。我创建了一个.config文件,其中包含有关程序集绑定重定向的信息。然后将.config复制到包含宿主应用程序二进制文件的目录中。现在,旧的和插件共存并正常工作,而无需在转换COM组件时使用Marshal.CreateWrapperOfType方法,因此似乎有一种解决方法,我甚至不需要对GAC进行更改。仍有一些问题需要解决,但目前似乎有一个可行的解决方案。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyCompany.Assembly1.Interop"
publicKeyToken="25578904345626a0"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="1.0.1.0"/>
<codeBase version="1.0.1.0"
href="F:\MyApp\bin\Primary Interop Assemblies\MyCompany.Assembl1.Interop.dll"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="MyCompany.Assembly2.Interop"
publicKeyToken="25578904345626a0"
culture="neutral" />
<bindingRedirect oldVersion="9.0.0.0"
newVersion="9.0.1.0"/>
<codeBase version="9.0.1.0"
href="F:\MyApp\bin\Primary Interop Assemblies\MyCompany.Assembly2.Interop.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
[关于根本原因的更多讨论,链接上的其他可能但尴尬的解决方案]