我正在使用Excel-DNA和C#开发Excel XLL加载项。该加载项称为MyAddIn.xll。加载项已保存到用户本地计算机,并且已通过以下过程将其安装/添加到Excel:

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

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

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

谢谢!

最佳答案

.xll文件将始终被Excel锁定,因此在加载加载项时无法更新该文件。您可能能够对外接程序进行结构设计,以使.xll不会随更新而更改,但您使用的.dll文件却会更改。

Excel-DNA支持两种方法来执行此操作:

  • .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>
    加载外接程序时,可以用引用新Version2目录的新版本替换MyAddIn.dna。
  • Excel-DNA支持在不锁定.dll的情况下加载.dll库文件。因此,您可以:<DnaLibrary ...> <ExternalLibrary Path="MyFunctions.dll" LoadFromBytes="true" /></DnaLibrary>
    这样,即使外接程序正在运行,您也可以替换MyFunctions.dll。

  • 在这两种情况下,您都不需要重新打开Excel来加载新版本,只需打开File-> Open .xll文件,它就会重新加载(或从代码中调用xlfRegisterApplication.RegisterXLL)。

    10-01 14:32
    查看更多