Как использовать ExcelDNA, разработанный XLL из C# без Excel

Мы создали XLL в C# с использованием ExcelDna, как описано в https://excel-dna.net/ --- все работает при тестировании из Excel.

Мы хотели бы иметь возможность использовать этот XLL в других проектах.NET - другими словами, как нам "разместить" этот XLL из.NET? XLL не является допустимой сборкой.NET, поэтому я не могу добавить его в качестве ссылки.NET на другие проекты.

Это сделано через ExcelDna.Integration dll как-то (который является сборкой.net)?

Спасибо

1 ответ

Excel-DNA - это просто связующее звено между сборками Excel и.NET.

Если вы хотите повторно использовать функциональность, которая находится внутри сборки.NET, которая загружается надстройкой Excel-DNA (т.е. XLL), то вам не нужно XLL для всего... Все, что вам нужно, это сборка.NET, что XLL загружается - добавьте ссылку на это в свое приложение.NET, и все готово... Как и в случае с любой другой библиотекой классов.

Другими словами, внутри вашего .dna файл, который используется Excel-DNA для определения того, что загружать, у вас есть что-то похожее на это:

<DnaLibrary Name="Your Add-In" RuntimeVersion="v4.0">
  <ExternalLibrary Path="YourAssembly.dll" ExplicitExports="false" ... />
</DnaLibrary>

YourAssembly.dll это уже сборка.NET, содержащая функции, доступные для Excel-DNA.


Что еще более важно, если вы знаете, что у вас будут разные.NET-клиенты для ваших функций, то вам следует спроектировать для этого, изолировать повторно используемые функции в выделенной сборке и сделать так, чтобы ваша сборка Excel-DNA содержала ссылку, и раскрыть функции в Excel, вместо того, чтобы заставлять клиентов зависеть от сборок Excel-DNA.

например

  • Библиотека классов C# Functions.dll (ничего не ссылается)
  • Библиотека классов C# ExcelAddIn.dll (Рекомендации Functions.dll)
  • Приложение C# MyCsApp.exe (Рекомендации Functions.dll)
  • Библиотека классов C# FunctionsComInterop.dll (Рекомендации Functions.dll)
  • Приложение C++ MyCppApp.exe (звонки FunctionsComInterop.dll)
  • и т.п.

диаграмма

В приведенном выше примере:

  • Functions.dll не ссылается на какую-либо сборку Excel-DNA и ничего не раскрывает через COM. У него должно быть как можно меньше зависимостей (в идеале нет!)

  • ExcelAddIn.dll создает мост к Excel-DNA и предоставляет функции Excel, которые могут быть вызваны Excel через Excel-DNA. Эти функции просто перенаправляют вызовы на Functions.dll сборка... больше ничего.

  • FunctionsComInterop.dll создает мост к C++ и предоставляет функции COM, которые могут вызываться приложением C++. Эти функции просто перенаправляют вызовы на Functions.dll сборка... больше ничего.

Другие вопросы по тегам