使一个基于C#的Excel插件运行在最不痛苦的过程之外

我在VS2005中开发了一个C#Excel 2003加载项的原型,它支持一些简单调用的对象,另外还有一个独立的RTD类,它们都坐在现有的大型C#栈上。

这一切都工作正常,但…

我被告知,为了避免与其他Excel插件可能需要不同的.Net运行时间的潜在冲突,我将不得不推出.Net代码,这是超出程序。

1)这是真的吗?

2)这样做是否可以按照自动按需启动程序外服务器,只有合适的用户才能访问(为了简化安全问题),而不需要精心安装等等。

3)如果可以这样做,怎么样?

目前我的(COM可见)类存根开始:

namespace SimpleAddinMockup1 { /// <summary> /// Main entry point from Excel for non-real-time methods. /// </summary> [ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)] public sealed class Main { ... } } 

 namespace SimpleAddinMockup1 { /// <summary> /// In-proc real-time server facade for an Excel instance to our main server connection. /// </summary> /// Note: to throttle updates in Excel use 'Application.RTD.ThrottleInterval = nnn' for nnn ms between updates (default is 2000). /// See: http://msdn.microsoft.com/en-us/library/aa140060(office.10).aspx [ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)] public sealed class CPRTDServer : Excel.IRtdServer { ... } } 

更新:我仍然非常想知道是否推C#outproc很容易做到,例如声明性…

确实,在当前可用的CLR版本(1.0,1.1和2.0)中,不同版本的CLR不能共存于一个进程中。 但是理论上,只要configuration好Excel来加载2.0 CLR,就不会有1.x加载代码和2.0加载代码共存的问题。 当任何1.x加载项代码被加载时,它应该自动指向2.0 CLR,它是向后兼容的。

曾经有一段时间,Excel已经连接到不加载2.0 CLR以解决特定的兼容性问题(在本文的侧栏中解释),但是这已经通过Office更新( KB908002 )解决,可以单独安装或与您的加载项的安装程序(现在应该已经推了)。 应用此更新后,Excel将自动加载最新的可用CLR版本。

微软目前的计划是,当4.0 CLR被释放(与VS2010)时,它将能够在一个进程中与2.0 CLR共存,所以希望这也不会成为一个问题。