Как использовать 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
сборка... больше ничего.