Автоматическое обновление (Excel-DNA) XLL при открытии Excel

Я разрабатываю надстройку Excel XLL, используя Excel-DNA и С#. Надстройка называется MyAddIn.xll. Надстройка была сохранена на локальных компьютерах пользователей и установлена/добавлена ​​в Excel с помощью следующей процедуры:

Параметры Excel --> Надстройки --> Управление надстройками Excel --> а затем добавьте MyAddIn.xll.

Теперь я хочу распространить обновление MyAddIn.xll для всех своих пользователей. Я использую инструмент развертывания, такой как Salt. Однако похоже, что для этого требуется, чтобы Excel был закрыт на компьютерах пользователей.

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

Спасибо!


person Samuel    schedule 21.05.2015    source источник


Ответы (1)


Файл .xll всегда будет заблокирован Excel, поэтому вы не сможете обновить этот файл во время загрузки надстройки. Возможно, вы сможете структурировать свою надстройку так, чтобы .xll не менялся с обновлениями, но изменялись используемые вами DLL-файлы.

Excel-DNA поддерживает два подхода для этого:

  1. Файлы .dna могут перенаправляться в подкаталоги, а корневой файл .dna можно обновлять во время загрузки надстройки. Итак, у вас может быть:

    • \AddInRoot\MyAddIn.xll
    • \AddInRoot\MyAddIn.dna
    • \AddInRoot\Version1\MyAddInImpl.dna
    • \AddInRoot\Version1\MyAddInImpl.dll
    • \AddInRoot\Version2\MyAddInImpl.dna
    • \AddInRoot\Version2\MyAddInImpl.dll

    А в MyAddIn.dna у вас есть <DnaLibrary ...> <ExternalLibrary Path="Version1\MyAddInImpl.dna" /> </DnaLibrary>

    Во время загрузки надстройки вы можете заменить MyAddIn.dna новой версией, которая ссылается на новый каталог Version2.

  2. Excel-DNA поддерживает загрузку файлов библиотеки .dll без блокировки .dll. Таким образом, вы можете иметь: <DnaLibrary ...> <ExternalLibrary Path="MyFunctions.dll" LoadFromBytes="true" /> </DnaLibrary>

    Тогда вы сможете заменить MyFunctions.dll даже во время работы надстройки.

В обоих случаях вам не нужно повторно открывать Excel, чтобы загрузить новую версию, вы можете просто Файл-> Открыть файл .xll, и он перезагрузится (или вызовет xlfRegister или Application.RegisterXLL из кода).

person Govert    schedule 21.05.2015
comment
Привет, Говерт, я только что попытался выполнить решение 2 выше. Это работает для MyAddIn.dll, проекта C#, в котором представлены все функции Excel (и где находится файл ДНК). Однако это не работает для других dll, на которые ссылается этот проект (например, ExcelDna.Integration). - person Samuel; 22.05.2015
comment
Ах да - я забыл об этом варианте. Вам никогда не понадобится ExcelDna.Integration.dll в выходном каталоге, и это может причинить некоторый вред. Правый уже упакован внутри файла .xll. Просто установите ссылку на ExcelDna.Integration в Copy Local=false в вашем проекте. - person Govert; 22.05.2015