Word 2010 надстройка не загружается, всто 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, мы наблюдаем следующее поведение:
Мы пытаемся открыть любой документ Microsoft Word 2010, появляется экран запуска Word 2010, и мы видим, что наша надстройка загружается "Загрузка [наша] надстройка", но затем Word 2010 не открывается. Экран запуска исчезает, и сообщение об ошибке не отображается.
При повторном открытии документа word просто выдается это сообщение (на этот раз не запускается экран Word 2010):
Word испытал серьезную проблему с
'[Our] word addin'
добавить в. Если вы видели это сообщение несколько раз, вам следует отключить эту надстройку и проверить, доступно ли обновление. Вы хотите отключить эту надстройку?При нажатии на "Нет", на короткое время запускается экран запуска Microsoft Word 2010, а затем он перестает загружаться снова (исчезает). При нажатии кнопки "Да" открывается Word 2010 с
[Our]
добавить в отключен. Проверено, нажав File-Options-AddIns. Посмотрел под отключенными надстройками приложенийнастройка
VSTO_SUPPRESSDISPLAYALERTS=0
а такжеVSTO_LOGALERTS=1
тоже был бесполезен. Мы проверили наш каталог Temp, логов не было.Так как вышеуказанный метод не работает, я скачал образец проекта по этой ссылке под названием "Развертывание решения VSTO 2010 для Office 2007/2010 с помощью установщика Windows" и использовал соответствующий проект, найденный в разделе "Разработка Office".
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 то, что он поддерживает.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 ответа
Причиной был Open XML SDK 2, я избегал Open XML SDK 2, и теперь мой AddIn работает отлично. Восстановить мой проект с нуля, используя Microsoft Interop для чтения / записи документов Microsoft Office 2010.
Проблема в том, что разработчикам не так много документации для чтения. Я выполнил тяжелую работу, читая статьи и самостоятельно выясняя проблему.
Надеюсь, другие не столкнутся с таким же испытанием.
Посмотрите, может быть, следующая ссылка поможет... Как создать пользовательскую программу установки.
Это помогло мне, и у меня был несколько похожий сценарий (Word 2010 Addin + Open XML SDK 2.0 - развернут на компьютере, работающем от 32-разрядной Windows XP с пакетом обновления 3 до 64-разрядной Windows 7 Professional).
Надеюсь, это поможет вам.