2015-12-30 2 views
1

У меня есть C# (2015 VS) приложение, которое ссылается Microsoft.Office.Interop.ExcelРаспределение приложения, требующего Microsoft.Office.Interop.Excel

Мой код включает oXL = new Microsoft.Office.Interop.Excel.Application();, а также ссылку выше.

Если я скомпилирую и установлю это приложение на машине, на которой уже установлены Office 2013 и .Net 4.0, но когда я ищу этот компьютер, я не могу найти Microsoft.Office.Interop.Excel.dll на нем где угодно, что, я полагаю, является тем, что мне нужно.

Я видел here:

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

Когда я создаю свое приложение, я не получаю Microsoft.Office.Interop.Excel.dll, включенный в мою папку Release (как, например, с другими ссылочными .dlls).

Должен ли я добавить это вручную или это единственный способ установить эту установку, чтобы также установить распространенные в Microsoft Office первичные сборки Interop?

+1

Вам необходимо указать, что сборка будет скопирована в вашу папку. Взгляните сюда: http://stackoverflow.com/questions/15816769/dependent-dll-is-not-getting-copied-to-the-build-output-folder-in-visual-studio – ProgrammerV5

+1

Перейти к свойствам ссылку и установите для «copy to local» значение true. В Interop libs по умолчанию установлено значение false. – jHilscher

+0

@jHilscher - Зачем добавлять и отвечать? Пока это все, что сработало для меня. – Jason

ответ

0

Перейдите к свойствам справки и установите copylocal в true. В Interop libs по умолчанию установлено значение false.

Это скопирует DLL, когда вы создадите проект.

Copy Local Свойство (соответствующий CopyLocal) определяет, является ли ссылка копируется в локальный путь бен.

Во время выполнения ссылка должна быть расположена либо в глобальном сборочном кэше (GAC), либо в выходном пути проекта. Если для этого свойства установлено значение true, ссылка копируется на выходной путь проекта во время выполнения.

Для более глубокого взгляда на копию локального см msdn

+1

В дополнение к настройке Copy Local = true мне сначала пришлось изменить Embed Interop Types = True (иначе Copy Local не был доступен) – Jason

0

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

Если вы используете Visual Studio, вы можете перейти в «Настройки» (вашего приложения) и вставить функции dependecies.

Проверить эти ссылки:

Deployment and Dependencies

How to: Create and Remove Project Dependencies

0

Джейсон, вы должны также ссылаться на объект LIBRARY MICROSOFT OFFICE XX.X. XX.X - это релиз, который у вас есть.

Когда ваш проект запускается на клиенте, VS будет находиться в GAC_MSIL, чтобы узнать, есть ли у него там Office.

Не пытайтесь добавлять библиотеки EXCEL, потому что это не работает. Ваш пользователь должен иметь Office для запуска вашего кода.

+0

Означает ли это, что вам не нужно развертывать Microsoft.Office.Interop.Excel.dll с вашим проектом? – jHilscher

+1

Да, ты не знаешь. Вам просто нужно ссылаться на эти библиотеки, а не отправлять их в проект. –

+0

Итак, у меня есть Office 2013, установленный на моем тестовом компьютере, и мое приложение не будет работать, если я также не буду распространять распространенные первичные сборки соединений: https://www.microsoft.com/en-us/download/details.aspx?id = 3508, когда я устанавливаю, что все работает нормально. – Jason

0

приложение .NET будет искать библиотеки DLL в глобальных сборках и связываться с любым соответствующим дллом есть динамически.

DLL = динамически подключаемая библиотека

Существуют различные библиотеки DLL для dofferent версий офиса и на разных платформах (32 бит против 64 бит). Короче говоря, НЕ включайте DLL в свой пакет. Поймать исключения в случае, если офис не установлен.

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