Word 2010 надстройка не загружается, всто 2010 - PullRequest
12 голосов
/ 06 октября 2010

Нашей машиной для разработки является 64-разрядное оборудование под управлением Windows 7 Professional N (64-разрядная), 64-разрядная версия Office профессиональный 2010 и Visual Studio Professional 2010.

Мы создали Word 2010 (надстройка уровня приложения), используя .NET Framework 4, ленты и установщик Windows, ориентированные на Office 2010. Мы несколько раз следовали всему - от официальных онлайн-учебников по MSDN до точечных. Для нашего установщика в качестве предварительных условий мы выбрали клиентский профиль .NET 4 и установщик Windows 3.1, поскольку в Office 2010 установлена ​​среда выполнения VSTO 4.0, а в .NET Framework 4 нет функции PIA. В условиях запуска мы проверили наличие Office 2010 Shared PIA и Word 2010 PIA, используя соответствующие идентификаторы компонентов. Кроме того, мы проверили доступность среды выполнения VSTO, как изложено в статье MSDN.

Наша надстройка загружается и выполняется с полной функциональностью ТОЛЬКО в отладке Visual Studio ( F5 ). Сборка проекта установки создает установщик Windows (MSI). При его установке надстройка на компьютере устанавливается без ошибок. Однако после установки надстройки при попытке открыть какой-либо документ Word 2010 мы наблюдаем следующее:

  1. Мы пытаемся открыть любой документ Microsoft Word 2010, появляется экран запуска Word 2010, и мы видим, что наша надстройка загружается «Загрузка [наша] надстройка», но затем Word 2010 не открывается. Экран запуска исчезает, и сообщение об ошибке не отображается.

  2. Во второй раз при открытии документа word просто появляется это сообщение (на этот раз без экрана запуска word word 2010):

    В Word возникла серьезная проблема с надстройкой '[Our] word addin'. Если вы видели это сообщение несколько раз, вам следует отключить эту надстройку и проверить, доступно ли обновление. Вы хотите отключить эту надстройку?

    При нажатии кнопки «Нет» кратковременно запускается экран запуска Microsoft Word 2010, а затем он прекращает загрузку снова (исчезает). При нажатии Да открывается Word 2010 с отключенным добавлением [Our]. Проверено, нажав File-Options-AddIns. Посмотрел в разделе Отключенные надстройки приложений

    Установка VSTO_SUPPRESSDISPLAYALERTS=0 и VSTO_LOGALERTS=1 также бесполезна. Мы проверили наш каталог Temp, логов не было.

  3. Поскольку вышеуказанный метод не работает, я скачал образец проекта по этой ссылке с именем 'Развертывание решения VSTO 2010 для Office 2007/2010 с помощью установщика Windows' и использовал соответствующий проект, найденный в разделе Офисное развитие - Setup and Deployment Projects Samples\FX40\AddIn Deployment\All User Install for 64-bit Office.

    Изначально я протестировал решение для правильной загрузки демонстрационного проекта надстройки Excel 2010, создав и запустив установщик (msi). Затем мы добавили наш проект Word AddIn в файл решения по файлу и правильно его построили ( CTRL). + SHIFT + B ). Он даже бежал из отладки Visual Studio (F5) правильно. Затем мы перенастроили существующий проект установки для удаления демонстрационного проекта Excel и загрузили основной вывод нашего надстройки Word, файлы [OurAdd-In] .vsto и [OurAdd-In] .dll.manifest. Мы обновили зависимости проекта и предприняли соответствующие шаги для исключения соответствующих файлов. Мы сохранили проверки реестра без изменений и добавили условия запуска для проверки Word 2010 PIA.

    Установщик успешно собран и установлен без ошибок, но, к сожалению, мы стали свидетелями точно такого же поведения Word 2010, как описано ранее.

Мы также попробовали отладку с помощью регистрации событий Windows. Я нашел это событие с идентификатором 4096:

************** Exception Text **************
Microsoft.VisualStudio.Tools.Applications.Deployment.FrameworkVersionMismatchException: <compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
 <framework targetVersion="4.0" profile="Client" supportedRuntime="4.0.30319" />
 <framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" />
</compatibleFrameworks>

Нам нужно создать установщик для нашей надстройки Word как для 32-разрядной, так и для 64-разрядной версии Word 2010.


Я продолжил исследования, и вот что я нашел.

Я использовал AddInSpy для дальнейшего изучения, и это отладочная информация, которую я получаю ...

<addIn>
 <Item>1</Item> 
 <Host>Word</Host> 
 <Running>true</Running> 
 <Loaded>false</Loaded> 
 <Type>VSTO</Type> 
 <FriendlyName>[OURADDIN]WordAddIn</FriendlyName> 
 <ProgID>[OURADDIN].WordAddIn</ProgID> 
 <CLSID>n/a</CLSID> 
 <Manifest>C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN]WordAddIn.vsto|vstolocal</Manifest> 
 <DllPath>C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN]WordAddIn.dll</DllPath> 
 <LoadBehavior>3</LoadBehavior> 
 <RegHive>HKCU</RegHive> 
 <AssemblyName>?</AssemblyName> 
 <CLR_version>?</CLR_version> 
 <Exposed>false</Exposed> 
 <Interfaces>?</Interfaces> 
 <FormRegions>n/a</FormRegions> 
 <VSTOR>2008</VSTOR> 
 <Installed>?</Installed> 
 <PubVer>n/a</PubVer> 
 <Status>Alert</Status> 
 <StatusDescription>Add-in DLL path is not found. System.BadImageFormatException: Could not load file or assembly 'file:///C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
File name: 'file:///C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll'
  at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
  at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
  at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
  at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, StackCrawlMark& stackMark)
  at System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile)
  at AddInSpy.AssemblyScanner.GetAssemblyInfo(String fileName, String hostName, Boolean isVstoAddIn)

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Users\Interance\Downloads\AddInSpy\AddInSpy.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Interance-PC\Interance
LOG: Where-ref bind. Location = C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll
LOG: Appbase = file:///C:/Users/Interance/Downloads/AddInSpy/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This is an inspection only bind.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft/[OURADDIN]Setup2010/[OURADDIN]AddIn.dll.
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.
</StatusDescription> 
 </addIn>

Полагаю, что интересно выше, следующие строки

Эта сборка построена средой выполнения, более новой, чем загруженная в данный моментвремя выполнения и не может быть загружено ...

Менеджер сборки загружен из: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll

LOG: Использование файла конфигурации машины из C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Config \ machine.config

.

В моем понимании Word 2010 пытается загрузить мою надстройку с помощью диспетчера сборки и файла конфигурации компьютера, ссылаясь на F / W версию v2.0.50727, когда она должна ссылаться на \Framework64\v4.0.30319\, так как я построил свою надстройку с помощью. NET 4. Как следствие это сообщение об ошибке 'This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded...'

Я думаю, что это может быть источником. Есть мысли, почему это может происходить и как это решить?


Хм ... Думаю, я должен был упомянуть об этом раньше, но я использую open xml 2 sdk для создания / чтения файлов Word в моей надстройке Word 2010 с .NET f / w 4. Я следовал документация предоставлена ​​здесь . Если вы прокрутите эту страницу вниз, вы найдете в разделе Представление архитектуры формата Open XML SDK * Уровень поддержки подсистемы 1080 *, который поддерживает .NET f / w 3.5, и в настоящее время SDK формата Open XML основан на стандарте Ecma- 376.

Более того, после нескольких часов щурения и прочтения множества статей, таких как Подробная статья Криса Рей , где он утверждает, что Office 2010 использует другой стандарт, ISO / IEC 29500, как его формат файла по умолчанию, в то время как Office 2007 поддерживает ECMA-376. Далее говорится, что:

ISO / IEC 29500 является прямым потомком ECMA-376. На самом деле он настолько прямой потомок, что второе издание ECMA-376 идентично ISO / IEC 29500.

Я обнаружил, что уровень поддержки системы Open XML SDK Format Architecture поддерживает .NET f / w 3.5, и в настоящее время Open XML Format SDK 2 основан на стандарте Ecma-376.

Ссылка для справки

Поэтому мне просто интересно, является ли Open XML SDK 2 источником моей проблемы? Поскольку ISO / IEC 29500 является потомком ECMA-376, могу ли я использовать Open XML SDK 2 для создания / изменения документов Word 2010 в моем коде?

Поэтому менеджер сборки и файл конфигурации машины загружаются из framework\v2.0.50727\ and not from \Framework64\v4.0.30319\?

Ответы [ 2 ]

7 голосов
/ 12 октября 2010

Причиной был Open XML SDK 2, я избегал Open XML SDK 2, и теперь мой AddIn работает отлично.Восстановить мой проект с нуля, используя Microsoft Interop для чтения / записи документов Microsoft Office 2010.

Проблема в том, что разработчикам не так много документации для чтения.Я выполнил тяжелую работу, читая статьи и самостоятельно выясняя проблему.

Надеюсь, другие не столкнутся с таким же испытанием.

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

См., Может быть, следующая ссылка поможет ... Как создать пользовательскую программу установки .

Это помогло мне, и у меня был несколько похожий сценарий (Word 2010 Addin + Open XML SDK 2.0 - развернут на компьютере с 32-разрядной версией Windows XP с пакетом обновления 3 до 64-разрядной версии Windows 7 Professional).

Надеюсь, это поможет вам.

...