Возникли проблемы с получением плагина VSTO Outlook 2010, работающего в Outlook 2013?

У меня есть плагин Outlook, созданный с помощью Visual Studio 2010 (клиентский профиль .net 4.0), который отлично работает в Outlook 2007 и Outlook 2010. Я только что тестировал 2013 год, и даже установка этого дополнения, похоже, дает сбой. После поиска в Google я вижу несколько примеров проблем, с которыми люди столкнулись, но по сути не могут получить прямого ответа на этот вопрос:

Существуют ли какие-либо предварительные условия, которые не позволяют надстройке VS 2010 Outlook работать только в 2013 году, или мне нужно обновить Visual Studio и создать специальную версию моего надстройки для Outlook 2013?


person leora    schedule 08.12.2014    source источник
comment
Все ли версии Office протестированы на одном и том же типе (32-бит / 64-бит)?   -  person Allan Elder    schedule 08.12.2014
comment
@Allen Elder - обе версии 32-битные   -  person leora    schedule 08.12.2014
comment
1) Не уверен, поможет ли это во время установки, но вы пробовали включить ведение журнала? Пункт 7 здесь, 2) Что говорит журнал событий? 3) Можете ли вы установить MSIExec с ведением журнала msiexec /i "MyVSTOOutlookInstaller.msi" /l*v "log.log" - пожалуйста, обновите свой вопрос, добавив эту дополнительную информацию.   -  person Jeremy Thompson    schedule 13.12.2014
comment
Мое предложение - отойти от основной причины сбоя в обратном порядке. Вы упомянули, что произошел сбой, но вы не говорите, что такое трассировка стека или журналы сбоя. Если вы опубликуете трассировку стека или другую соответствующую информацию, вам не придется гадать о решении. ПРИМЕЧАНИЕ: Вы можете использовать WINDBG, чтобы увидеть все это, вызвав SOS во время сбоя. А пока без этой информации здесь все только предположения.   -  person JWP    schedule 16.12.2014
comment
@JohnPeters, знаете ли вы, как использовать WinDbg для отладки этого, например, как настроить ADPLUS (или другие) для записи дампа во время установки? Я знаю только, как использовать его для High CPU, OOM, зависаний и сбоев. Работает ли ADPlus при сбоях при установке, а затем как вы его отлаживаете (поскольку вы получаете только фрагмент, без предварительной информации)? Вы понимаете, о чем я? Очевидно, я попросил журналы 4 дня назад, кажется, OP не интересуется ...   -  person Jeremy Thompson    schedule 17.12.2014
comment
ADPlus позволяет делать дамп в момент сбоя. Теперь, прежде чем вы это сделаете, вы можете перекомпилировать неисправный модуль и запустить отладочную версию в производство (если у вас нет файлов PDB для того, который там сейчас работает). Оттуда возьмите файл дампа, откройте его и вызовите SOS. Попав внутрь SOS, вы теперь смотрите на материал .NET и знакомы с командами. Начните с трассировки стека потока, в котором произошел сбой.   -  person JWP    schedule 17.12.2014
comment
Другой способ сделать это - запустить Windbg на производственной машине, открыть его и подключиться к процессу, в котором произошел сбой. Обязательно установите параметры исключения так, чтобы он прерывался и показывал вам исключения первого шанса. Таким образом, Windbg получит исключение до того, как сделает это приложение. Узнайте, как запустить надстройку SOS. Помните, что, когда она ломается, она прерывается в потоке отладки, поднимает все потоки и переходит на тот, который вызвал исключение, а не на тот, на котором он сломался.   -  person JWP    schedule 17.12.2014
comment
@leora Я предлагаю изучить сбой. Мой опыт работы с этими плагинами показывает, что они обычно дают сбой, потому что одноразовые объекты не ссылаются должным образом, затем собираются, и ваши зависимые объекты больше не имеют неуправляемого аналога. Я помню, что в конце концов поместил все объекты, которые я использую, в класс и вручную удалил их, чтобы убедиться, что вещи не расположены в неправильном порядке. Если в 2013 году используется другой шаблон доступа к памяти, это может объяснить сбои. PS: Самый простой способ понять это - подключить отладчик VS с помощью «запустить внешнюю программу».   -  person atlaste    schedule 18.12.2014
comment
@JohnPeters, дело в том, что только у MS есть частные символы, которые предоставляют тела методов (а не только имена методов, как с общедоступными символами). Установка надстройки VSTO фактически не запускает какой-либо код, установка просто добавляет ключи реестра и копирует файлы и манифесты. Следовательно, создание дампа с отладочными версиями файлов не имеет значения. Конечно, !Analyze в дампе может дать вам подсказку относительно модуля, в котором произошло первое / второе случайное исключение. Это то, о чем я спрашивал, как вы можете WinDBG сбой установщика без частных символов, но копаться в дампе - это допустимый момент   -  person Jeremy Thompson    schedule 18.12.2014
comment
@JohnPeters Думаю, теперь я понимаю, о чем вы говорите. Вы предлагаете сделать !CLRStack и следить за стеком вызовов, чтобы показать OP дымящийся пистолет. Тебя не волнуют даже тела методов. btw Я почти уверен, что msiexec не управляется, поэтому SOS не поможет. Но теперь я понимаю, как можно получить приблизительное представление о том, что ломается во время установки с помощью WinDBG :) И вы правы без журналов, о которых мы все здесь догадываемся !!   -  person Jeremy Thompson    schedule 18.12.2014
comment
О, я не понимал, что у вас проблемы с отладкой и установщиком. Это установка Installshield? Если это так, то 95% установочной версии запускается родным образом. В этом случае вам все равно нужно будет взять дамп и использовать! Анализируйте, но убедитесь, что вы находитесь в правильном потоке. Оттуда это плохая игра, потому что высока вероятность, что вы не узнаете модули в стеке вызовов. Не теряйте надежды, потому что у многих из них хорошие имена, дающие вам дополнительную подсказку. Вы не хотите переходить в режим разборки, просто попробуйте следовать за стеком вызовов. И да! CLRStack - это то, что я все время использую для решения производственных проблем с дампами.   -  person JWP    schedule 18.12.2014
comment
И последнее замечание о последовательности загрузки и Windbg ... Когда программа запускается, сразу же вызывается собственный загрузчик. Когда запрос приходит от зависимости в сборке для программы .NET, он сначала считывает файл и проверяет манифест сборки. Если он обнаруживает, что это программа .NET, он немедленно передает запрос загрузчику .NET, известному как Fusion. Вы также можете настроить Fusion для записи журналов, которые помогут вам найти недостающие сборки. Вы не можете рассчитывать на то, что какая-либо DLL или ASSEMBLY автоматически включат зависимые библиотеки DLL. Журналы Fusion вместе с ILDASM могут рассказать вам все.   -  person JWP    schedule 18.12.2014


Ответы (6)


У вас установлен Outlook 2013 на компьютере, на котором установлен проект надстройки? В этом случае вы можете выполнить отладку из VS 2010, установив для параметра «Запуск внешней программы» на вкладке «Отладка» окна свойств проекта значение Outlook 2013 .exe. Когда я создал свою надстройку, я смог отладить ее, используя любую версию Outlook, которая была на моем компьютере разработки, и я не помню, чтобы менял что-либо, кроме внешнего пути к программе.

Если вы используете проект установки для установки, ему потребуется другой ComponenedId при создании условий запуска. Для установки в Outlook 2010 и 2013 вам потребуются два разных проекта установки. Вот PIA-ключи Office 2013 и Ключи Office 2010.

person Natzely    schedule 11.12.2014

Все подробности описаны в статье Запуск решений в различных версиях Microsoft Office. В нем говорится следующее:

Если вы разрабатывали решения для Office 2010, вы можете запускать те же решения в Microsoft Office 2013. Решения, созданные с помощью Visual Studio 2013, Visual Studio 2012 или Visual Studio 2010, могут работать в Office 2013, Office 2010 или Microsoft Office 2007. система.

Какова целевая платформа .Net вашей надстройки? Вы пытались отладить код? Есть ли исключения?

person Eugene Astafiev    schedule 08.12.2014
comment
Вам необходимо изменить целевую платформу на полную версию (не профиль клиента). - person Eugene Astafiev; 11.12.2014

Вы пытались снова включить надстройку? Он не запускается после того, как он находится в отключенной очереди. После того, как вы снова включите его на отключенном экране надстройки, вы можете установить флажок на экране COM-AddIn, чтобы он загрузился, что затем должно запрашивать более подробную информацию, поскольку вы устанавливаете переменную VSTO_SUPPRESSDISPLAYALERTS о том, что могло произойти в первое место. Проблема может заключаться в том, что надстройка была жестко отключена Outlook. Обратите внимание, что надстройка отображается не в разделе «Надстройки неактивных приложений», а в разделе «Надстройки для отключенных приложений». Это имеет значение: в последнем случае просто перейти на экран COM-AddIn и установить флажок недостаточно для решения проблемы.

Выполните следующие действия для принудительно отключенной надстройки?

  1. Перейдите в поле «Управление», измените «Надстройки COM» на «Отключенные надстройки» и нажмите «Перейти». Выберите надстройку и нажмите Включить. Щелкните "Закрыть". Хорошо, теперь надстройку можно снова загрузить:

  2. В поле «Управление» измените «Отключенные надстройки» на «Надстройки COM» и нажмите кнопку «Перейти». установите флажок рядом с отключенной надстройкой. Щелкните ОК.

Дополнительные сведения см. На ЭТОМ сайте.

person SanyTiger    schedule 18.12.2014
comment
Я подробно описываю все эти шаги и, IMHO, более подробно здесь. Я не уверен, что вы понимаете вопрос, сбой происходит во время установки , а не во время работы надстройки. Только запуск в Office может привести к тому, что Office отключит его, но не во время установки. - person Jeremy Thompson; 18.12.2014

Я смутно помню, как раньше сталкивался с падением надстройки при установке ... разрешение:

  1. Установите Инструменты Visual Studio 2010 для среды выполнения Office на целевом компьютере машина.

введите описание изображения здесь

  1. Попробуйте установить надстройку VSTO еще раз , и вы не получите сбой во время установки.
person Jeremy Thompson    schedule 18.12.2014
comment
Я предполагаю, что Office 2013 находится на другом компьютере, чем компьютер с 2010, потому что я видел проблемы с пользователями, у которых оба были установлены на одном компьютере. - person Jeremy Thompson; 18.12.2014

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

Вы можете перейти по этой ссылке для получения дополнительной информации: http://www.greycastle.se/vsto-project-office-target-version/

person Pouki    schedule 18.12.2014

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

  1. Когда исполняемый файл запускается, собственный загрузчик должен найти файл, загрузить его в память вместе со всеми зависимыми библиотеками DLL, чтобы запустить его.
  2. Собственный загрузчик просматривает манифест сборки, чтобы определить эту информацию, а затем просто выслеживает все библиотеки DLL и загружает их в память (по порядку).
  3. Вы можете легко увидеть этот процесс, используя WINDBG, указав на EXE и запустив его из Windbg. Список загружаемых модулей - это работающий собственный загрузчик.
  4. Если зависимость представляет собой сборку управляемого кода .NET, то собственный загрузчик передает запрос загрузки непосредственно управляемому загрузчику, известному как «Fusion».
  5. Вы можете легко настроить программу просмотра FusionLOG, чтобы видеть, что происходит http://msdn.microsoft.com/en-us/library/vstudio/e74a18c4%28v=vs.100%29.aspx
  6. Сбои при загрузке либо на управляемом уровне, либо на управляемом уровне легко обнаруживаются либо с помощью WINDBG для собственного кода, либо с помощью Fusion Log View для управляемого кода.

Несколько советов по управляемой загрузке DLL: если сборка содержит ссылку на dll, которая не включена в эту сборку, существует строгий порядок «зондирования», которому следует следовать, чтобы найти dll. Будет сделано как минимум три попытки найти библиотеки DLL в разных местах, например, в сборке, в корневом пути программы и в GAC. Если три попытки завершились неудачно, загрузка останавливается на этом этапе и программа не запускается. Когда это происходит, это часто считается экологической проблемой системного уровня; однако на самом деле это проблема программирования, потому что до тех пор, пока системные требования не будут полностью известны системному администратору, он не сможет догадаться об этом. Если вы программист, который включает другие зависимые библиотеки DLL, вам всегда следует подумать, стоит ли размещать их в сборке, чтобы решить эту проблему. В противном случае вам, системным администраторам и людям, использующим вашу программу, придется ждать, пока не будет определена основная причина, что займет много времени.

Вы можете сказать, что другой отдел сказал мне использовать эту dll, и я понятия не имею, каковы другие зависимости! Это не оправдание, поскольку есть отличные инструменты, такие как ILDASM, и даже средства обхода зависимостей управляемого кода, которые расскажут вам все, что нужно. Лучший способ упаковать эти «другие» библиотеки DLL - просто включить их в вашу сборку.

person JWP    schedule 18.12.2014