C# 打开Excel时自动更新(Excel DNA)XLL

C# 打开Excel时自动更新(Excel DNA)XLL,c#,deployment,updates,excel-dna,xll,C#,Deployment,Updates,Excel Dna,Xll,我正在使用Excel DNA和C#开发一个Excel XLL外接程序。外接程序名为MyAddIn.xll。外接程序已保存到用户本地计算机,并已通过以下过程安装/添加到Excel: Excel选项-->加载项-->管理Excel加载项-->然后添加MyAddIn.xll 我现在想向所有用户推出MyAddIn.xll的更新。我正在使用一个部署工具,比如Salt。然而,这似乎需要在用户计算机上关闭Excel 有没有一种方法可以在用户打开Excel时将新的xll推送到他们的计算机上,并在他们重新启动Ex

我正在使用Excel DNA和C#开发一个Excel XLL外接程序。外接程序名为MyAddIn.xll。外接程序已保存到用户本地计算机,并已通过以下过程安装/添加到Excel:

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

我现在想向所有用户推出MyAddIn.xll的更新。我正在使用一个部署工具,比如Salt。然而,这似乎需要在用户计算机上关闭Excel

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


谢谢

Excel将始终锁定.xll文件,因此加载加载项时无法更新该文件。您可以对外接程序进行结构化,以便.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中你有
    
    

    加载加载项时,可以使用引用新版本2目录的新版本替换MyAddIn.dna

  • Excel DNA支持加载.dll库文件而不锁定.dll。因此,您可以:
    
    

    这样,即使外接程序正在运行,您也可以替换MyFunctions.dll


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

    您好,我刚刚尝试了上面的解决方案2。它适用于MyAddIn.dll,这是一个C#项目,所有Excel函数都在该项目中公开(dna文件位于该项目中)。但是,它不适用于此项目引用的其他dll(例如ExcelDna.Integration)。啊,是的-我忘记了这个选项。输出目录中永远不需要ExcelDna.Integration.dll,这可能会造成一些伤害。右边的已打包在.xll文件中。只需在项目中将对ExcelDna.Integration的引用设置为“Copy Local=false”。