Ответ 1
Мое решение
Итак, после того, как я много ударил головой о стену - выяснение свойств, условий и проектов msbuild не работает для/в разделе ProjectExtensions, я выяснил дополнительный хак, который делает мой. csproj работает в Visual Studio 2013 [обновление 3], установлен ли разработчик Office 2010 или Office 2013 (он подробно описан во втором пункте ниже - который не требуется для того же поведения в VS 2010, YMMV для VS 2012).
Чтобы ваш проект работал таким образом, вам нужно выполнить следующие три действия:
-
Рука отредактируйте файл .csproj и найдите все ссылки на сборку межсетевых взаимодействий - убедитесь, что версия установлена на версию "14.0.0.0" (в отличие от "15.0.0.0" ) и что "SpecificVersion" дочерний элемент присутствует и установлен в "False".
-
В проекте Project\ProjectExtensions\VisualStudio\FlavorProperties\ProjectProperties найдите пару атрибут/значение "OfficeVersion" и удалите его (так что атрибут, который читает
OfficeVersion="14.0"
- удаляет это). - Оставьте все остальные 14.0s неповрежденными, если что-то изменилось до 15.0, верните его обратно до 14.0 (и снова, если это ссылка, установите SpecificVersion в false). - Не беспокойтесь о смене GUID, просто оставьте их такими, какие они есть! -
На этом этапе решение откроется и скомпилируется на компьютерах, на которых запущена Visual Studio 2013, есть ли у них Office 2010 или Office 2013. - Но он не запустит решение на машинах, работающих в Office 2013. Чтобы исправить что:
- Откройте regedit и перейдите в HKLM\Software\Microsoft\Office\
- Экспортировать всю ветку 15.0 в файл .reg.
- Откройте файл в блокноте и измените все вхождения в реестре "15.0" на "14.0".
- Перезагрузите файл (убедитесь, что вы сохранили его как unicode).
- Импортировать файл и перезапустить Visual Studio. - Это позволит вам начать с отладки с Office 2013.
Еще одна вещь, о которой нужно помнить - особенно если вы используете EmbedInteropTypes, убедитесь, что когда вы создаете свою сборку выпуска/публикации, которую вы делаете с компьютера с Office 2010 (а не 2013), чтобы опубликовать сборка построена на основе конкретных библиотек Office 2010. - Это будет означать, что у вас есть обратная и прямая совместимость между двумя версиями.
Снова, это сработало для меня для надстройки Word - для YMMV надстройки Excel.
Оригинальный "Ответ" (может содержать полезные сведения для других)
Я упомянул выше в комментариях, что у меня противоположная проблема - VS 2013 Update 3 принудительно обновляет мои проекты, если у пользователя установлен Office 2013.
Вы можете попробовать установить VS 2013 Update 3 (даже временно, скажем, в виртуальной машине) и последнюю версию VSTO 2012/2013, а также открыть проект, и он должен также обновить вашу версию. Я знаю, что вы используете Excel, и я использую Word, но раздел, который он обновляет:
Старый .csproj XML:
<Project ...>
...
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
<ProjectProperties HostName="Word" HostPackage="{20A848B8-E01F-4801-962E-25DB0FF57389}" OfficeVersion="14.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\14.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
<Host Name="Word"... />
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
...
</Project>
Новый .csproj XML:
<Project ...>
...
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
<ProjectProperties HostName="Word" HostPackage="{29A7B9D7-A7F1-4328-8EF0-6B2D1A56B2C1}" OfficeVersion="15.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\15.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
<Host Name="Word"... />
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
...
</Project>
Мне кажется, что изменились две вещи:
-
Путь к реестру от 14.0 до 15.0 (который в VS 2010 был прост для работы - вы только что создали соответствующий путь реестра 14.0, указав, где вы установили Word 2013, и он работал нормально).
-
Идентификатор CLS пакета хоста. Я не знаю, что они для Excel, но вы, вероятно, можете посмотреть их. - Я предпочитаю не изменять идентификатор CLS проверенного в проекте, так что разработчики, разрабатывающие и тестирующие проект в Word 2010, могут продолжать это делать, а также те, которые разрабатывают и тестируют Word 2.0.
Кроме того, похоже, что две ссылки были обновлены с 14.0 до 15.0, а это - серьезный нет-нет - поскольку мы хотим строить только против/встраивать типы Interop 2010 (эти работы отлично работают в 2013 году, но мы не хотим случайно получить доступ к некоторому имуществу 2013 года, а затем не работать в 2010 году...)
Две обновленные ссылки: "Microsoft.Office.Interop.Word" и "Office".
Edit: Похоже, я могу установить эти две ссылки на SpecificVersion: False, а затем вручную отредактировать XML файл, чтобы вернуть их обратно до "14.0.0.0" (версия кажется недоступной из обычного меню).