打开 Excel 后自动更新 (Excel-DNA) XLL

Automatic update of (Excel-DNA) XLL with Excel opened

我正在使用 Excel-DNA 和 C# 开发 Excel XLL 插件。加载项称为 MyAddIn.xll。 Add-In已经保存到用户本地机器上,通过以下过程installed/added到Excel:

Excel 选项 --> 加载项 --> 管理 Excel 加载项 --> 然后添加 MyAddIn.xll.

我现在想向所有用户推送 MyAddIn.xll 的更新。我正在使用诸如 Salt 之类的部署工具。但是,这似乎需要在用户计算机上关闭 Excel。

有没有一种方法可以在用户计算机 Excel 打开时将新的 xll 推送到用户计算机,并在他们重新启动 Excel 时让更改生效?

谢谢!

.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 文件,它就会重新加载(或调用 xlfRegisterApplication.RegisterXLL 来自代码)。