5

У меня есть приложение, разработанное в Visual Studio 2005, которое я развертываю с помощью ClickOnce. Мое решение содержит два проекта - уровень пользовательского интерфейса, закодированный в VB, и библиотеку классов, закодированную в C#. В моей библиотеке классов C# есть код, который использует ассемблирование Outlook и Excel (Microsoft.Office.Interop.Outlook и Microsoft.Office.Interop.Excel, обе версии 11). Вот мои вопросы.Ссылки на сборку Microsoft Office Interop

  1. Хотя я не нашел, где это указано как абсолютное, я понимаю, что вы должны иметь соответствующие версии приложений Office (Outlook/Excel) для того, чтобы установить приложение, которое использует сборки Interop , Это верно?

Если (1. = Да) Тогда

Как бы вы справиться с ситуацией, в которой ваше приложение использует Interop сборки для всего пару функций, которые будут использованы лишь немногие из общая база пользователей? Почему я должен требовать от каждого пользователя моего приложения установки Microsoft Office, если только некоторые пользователи будут использовать эти функции? Эти сборки Interop являются только .dll файлами, и что делает их настолько отличными от других, что вы не можете просто публиковать файл с вашим проектом и удовлетворять этой ссылке независимо от того, какое программное обеспечение установлено на клиенте? (Ясно, что я плохо разбираюсь в GAC, и это влияет на поведение Visual Studio.) Я был бы счастлив написать свой собственный код, чтобы проверить наличие необходимого программного обеспечения Office для нескольких функций, которые их используют. Нет Управление, нет доступа к функции ...

Else

Если мое понимание на это неверно, то как я могу настроить мои ссылки и настройку ClickOnce, чтобы пользователи не столкнуться со следующей ошибкой при попытка установки?

«Не удается установить или запустить приложение. Приложение требует, чтобы узел офиса версии 11.0.0.0 будет установлена ​​в глобальном кэше сборок (GAC) в первую очередь.

Пожалуйста, обратитесь к системному администратору.»

  • Я попытался установить ссылки на Interop ссылки Свойства CopyLocal как для True, так и для False.
  • В моем списке приложений приложений ClickOnce я попытался установить эти сборки для включения, исключения и предварительного требования.
  • В моем исследовании я видел, где некоторые люди имеют эти ссылки, указывающие на * C: \ WINDOWS \ assembly \ GAC *, мои указывает на * C: \ Program Files \ Microsoft Visual Studio 9.0 \ Visual Studio Tools for Office \ PIA \ Office11 *, но я не нашел способа изменить ссылочный путь. Согласно http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspx, вы НЕ МОЖЕТЕ добавить ссылки от GAC, так как же другим людям это удалось?
  • Я пробовал копировать ссылки из * C: \ Program Files \ Microsoft Visual Studio 9.0 \ Visual Studio Tools для Office \ PIA \ Office11 * в каталог проекта и ссылаться на них там.

End If

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

Если возможно, постарайтесь максимально точно ответить на мои конкретные вопросы. Хотя статьи полезны, я уже прочитал много статей и попробовал много предлагаемых решений и не нашел успеха. Имейте в виду, что я не понимаю логистики того, как все это работает.

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

ответ

2

По моему опыту, попытка управлять сборками межсетевых взаимодействий в широком сценарии развертывания - это кошмар. Если вы развертываете через ClickOnce, даже если вы обойдете проблему GAC, о которой вы отметили выше (возможно, если ваш ИТ-отдел вытеснит регистрацию сборок в GAC, если это корпоративная среда), вам нужно будет обрабатывать ситуации, когда пользователи имеют разную версию Office, чем стандарт, - и небеса помогают вам, когда Office 13 выходит, и пользователи начинают обновляться, и это нарушает ваше приложение.

Для того, чтобы обойти использование сборок с привязкой к версиям, можно автоматизировать работу с помощью pinvoke непосредственно с обертками Office COM, которые не зависят от версии (они вытаскивают текущую версию офиса на клиенте из реестра). Однако у него будут свои собственные проблемы с развертыванием (возможно, вам потребуется обновить реестр для обработки компьютеров, на которых установлены PIA, например, которые могут быть очень сложными при использовании ClickOnce для развертывания), и с этим намного сложнее разработать.

Если бы я был в ваших силах, я бы начал с глубокого изучения функциональности взаимодействия, которую вы используете в своей библиотеке классов, - есть ли другой способ предоставить вам необходимую функциональность, вне офиса, клиентская машина? Возможно, сервис-ориентированное решение, в котором клиенты отправляют запрос на сервер для создания персонализированного офисного документа и предоставляют его для скачивания ...

+0

Благодарим за отзыв. До сих пор у меня не было проблем с версией - пользователи с 2003 и 2007 годами смогли использовать эти функции просто отлично. Я предполагаю, что более простой вопрос, чтобы действительно настроить то, что мне интересно, можно ли сделать мое приложение доступным для пользователей, которые НЕ имеют ЛЮБОЙ версии Office, позволяя им использовать функции non-Interop моего приложения? Я понимаю, что они должны иметь Outlook/Excel, чтобы использовать мои функции на основе Interop, но большая часть моего приложения не имеет ничего общего с Office. – 2009-08-06 16:55:05

+0

Я хотел бы думать, что один экземпляр кода Interop не будет полностью ограничивать ваше приложение теми, у кого установлен Office. – 2009-08-06 16:55:37

+0

Одна вещь, которую следует попробовать использовать для загрузки по требованию (http://msdn.microsoft.com/en-us/library/ak58kz04(VS.80).aspx) - вы должны иметь возможность кодировать так, чтобы до вызывая/загружая сборку, содержащую ваши классы взаимодействия с Интернетом, есть проверка, чтобы установить, установлен ли Office. То, что я не знаю, - это то, что ClickOnce задерживает проверку зависимостей, пока сборка «Загрузка по требованию» на самом деле не запрашивается для загрузки, или если она проверяет наличие всех возможных зависимостей вне ворот. –

1

Вот что я знаю по опыту (я должен отметить, что мы не использовали ClickOnce, но Я не уверен, почему это имеет значение):

Если вы напишете API Excel 2003 и развернете его на компьютере с Excel 2007, он будет работать, потому что Excel 2007 существенно олицетворяет Excel 2003. Проблема в том, что некоторые API изменились и их некоторые из них даже удалены. Вам придется попробовать сами, чтобы увидеть, влияет ли ваше приложение.

Фактически, это немного хуже, чем это. Если вы запустите свое приложение на компьютере с установленными Excel 2003 и Excel 2007, ваше использование Interop все равно будет использовать Excel 2007.

Одна из возможностей заключается в использовании , который дает вам совместимый с Excel элемент управления Windows Forms, реализованный полностью в одном. NET, которую вы можете развернуть с вашим приложением - так что ваше приложение не будет зависеть от Office.

Вы можете скачать бесплатную пробную версию here, если хотите попробовать.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

1

Лучший способ заключается в использовании позднего связывания библиотеки

https://sourceforge.net/projects/exceldata/

  • не nigthmare с iterops и буферами TLB с различными офисными версиями
  • поддержки различных офисы
  • легко модифицировать

Однако:

  • его трудно поддерживать эту библиотеку
0

Используйте COM-интерфейс и позднего связывания. VB.NET всегда поддерживал позднюю привязку. Просто используйте Marshal.GetActiveObject() и установите тип переменной в Object. Вы можете создать объект VB.NET, который сделает это, и вызвать его из C#.

С помощью C# вы получаете позднюю привязку, если используете API отражения, но это очень больно, чтобы писать код, используя это. В C# 4 вы также можете получить позднюю привязку через динамический тип.

Если вы сделаете это, вам не нужно распространять любые сборки Office, и ваш код будет работать до тех пор, пока атрибуты объектов в API Office не изменятся.

Поздний код привязки медленнее, чем ранний код привязки, но для многих целей это не проблема.

8

Возможно, вам понравится проект NetOffice: http://netoffice.codeplex.com/.

Это бесплатная (лицензия MIT) и полная (все версии 2000-2010 годов и все приложения Office) набор независимых по объему сборок. Сборки генерируются из реальных PIA с помощью инструмента, поэтому они являются правильными, полными и актуальными и могут быть быстро обновлены для будущих версий.

Другая приятная особенность заключается в том, что IntelliSense для каждого участника отображает, какие версии Office реализуют этот элемент.

Для развертывания вы можете копировать или устанавливать сборки в своем приложении.

Смежные вопросы