Word Interop ошибка времени компиляции - PullRequest
1 голос
/ 25 мая 2010

Я получаю следующую ошибку при ссылке на сборку Microsoft.Office.Interop.Word в моем приложении asp.net.

Тип «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 находился в каталоге PIA в Visual Studio, но сообщение об ошибке было тем же, за исключением указания на другой путь. С тех пор я скопировал dll в GAC, но с той же ошибкой.

Я думал, что .Net должен был позаботиться об этом. Кто-нибудь может мне помочь?

Кстати, я делаю это с помощью Visual Studio .Net 2008

1 Ответ

0 голосов
/ 25 октября 2011

Это из предыдущего ответа , но с соответствующей информацией, в случае, если ссылка умирает от link-rot:


Проблемы с управлением версиями основной сборки взаимодействия : Используя файл .config и перенаправление привязки сборки, я наконец-то смог избавиться от первоначально сообщенного исключения. Я создал файл .config, содержащий информацию о перенаправлениях привязки сборки. Затем файл .config был скопирован в каталог, содержащий двоичные файлы хост-приложения. Теперь и старый, и плагины сосуществуют и работают правильно без необходимости использовать метод Marshal.CreateWrapperOfType при приведении компонента COM, так что кажется, что есть обходной путь, и мне даже не пришлось вносить изменения в 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>

[более подробно обсуждается первопричина, другие возможные, но неудобные решения по ссылке]

...