Word 2010 addin не загружается, vsto 2010
Наша машина для разработки - это 64-разрядная аппаратная часть под управлением Windows 7 Professional N (64-разрядная версия), 64-разрядная версия Office Professional 2010 и Visual Studio Professional 2010.
Мы создали Word 2010 (Application Level Add-In) с использованием .NET Framework 4, Ribbons и установщика Windows, ориентированного на Office 2010. Мы следили за всем, начиная с официальных онлайн-учебников MSDN до точки несколько раз. Для нашего установщика мы выбрали клиентский профиль .NET 4 и установщик Windows 3.1 в качестве предварительных условий, поскольку Office 2010 имеет установленную среду исполнения VSTO 4.0, а .NET framework 4 не имеет функциональности PIA. В условиях запуска мы проверили наличие доступности PIA Office 2010 и PIA 2010, используя соответствующие идентификаторы компонентов. Кроме того, мы проверили наличие времени выполнения VSTO, как это изложено в статье MSDN.
Наши надстройки загружаются и выполняются с полной функциональностью ТОЛЬКО в отладке Visual Studio (F5). При создании проекта установки создается установщик Windows (msi). Установка его устанавливает надстройку на машине без каких-либо ошибок. Однако после установки надстройки, когда мы пытаемся открыть любой документ Word 2010, мы наблюдаем следующее поведение:
-
Мы пытаемся открыть любой документ Microsoft Word 2010, появится экран запуска Word 2010, и мы можем увидеть, как загружается надстройка "Loading [Our] Add-In", но Word 2010 не открывается. Экран запуска исчезает, и сообщение об ошибке не отображается.
-
Открытие документа Word во второй раз просто запускает это сообщение (на этот раз не отображается экран запуска 2010 года):
У Word возникла серьезная проблема с надстройкой '[Our] word addin'
. Если вы видели это сообщение несколько раз, вы должны отключить эту надстройку и проверить, доступно ли обновление. Вы хотите отключить эту надстройку?
Нажав "Нет", кратковременно запускается экран запуска Microsoft Word 2010, а затем он снова перестает загружаться (исчезает). Нажав на "Да", открывается Word 2010 с отключенным элементом [Our]
. Проверьте, нажав "Параметры файла-Add-In". Просмотрен в разделе "Отключенные приложения"
Настройки VSTO_SUPPRESSDISPLAYALERTS=0
и VSTO_LOGALERTS=1
тоже бесполезны. Мы проверили наш каталог Temp, журналов не было.
-
Поскольку вышеупомянутый метод не работал, я загрузил образец проекта из этой ссылки с именем 'Развертывание решения VSTO 2010 для Office 2007/2010 с использованием Windows Installer ' и использовал соответствующий проект в Office Development - 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 и загрузить наше первичное содержимое Add-In, файлы [OurAdd-In].vsto и [OurAdd-In].dll.manifest. Мы обновили зависимости проектов и предприняли соответствующие шаги для исключения соответствующих файлов. Мы проверили целостность реестра и добавили условия запуска для проверки PIA Word 2010.
Установщик успешно создан и установлен без ошибок, но, к сожалению, мы наблюдали то же поведение 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 пытается загрузить мою надстройку с помощью Assembly Manager и файла конфигурации машины, ссылающегося на версию 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 2010 с .NET f/w 4. Я следил за документация, представленная здесь. Если вы прокрутите страницу вниз, вы найдете в разделе поддержки Знакомство с Open XML SDK Format Architecture, поддерживающее .NET f/w 3.5, и в настоящее время SDK Open XML Format основан на стандарте Ecma -376.
Кроме того, через пару часов щуриться и читать множество статей, таких как Chris Rae подробная статья, где он утверждает, что 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\
?
Ответы
Ответ 1
Open XML SDK 2 был причиной, я избегал Open XML SDK 2, и моя AddIn работает отлично. Восстановил мой проект с нуля с помощью Microsoft Interop для чтения/записи документов Microsoft Office 2010.
Проблема заключается в том, что для разработчиков не так много документации. Я проделал работу с чтением статей и выяснил проблему самостоятельно.
Мы надеемся, что другим не придется сталкиваться с такими же испытаниями.
Ответ 2
Смотрите, возможно, следующая ссылка поможет... Как создать пользовательскую программу установки.
Это помогло мне, и у меня был несколько схожий сценарий (Word 2010 Addin + Open XML SDK 2.0), развернутый на компьютере, запущенном из Windows XP с пакетом обновления 3 (32-разрядная версия) до 64-разрядной версии Windows 7 Professional).
Надеюсь, это поможет вам.