首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在同一个.NET进程中同时拥有CLR4.0实例和.NET 3.5实例?

是否可以在同一个.NET进程中同时拥有CLR4.0实例和.NET 3.5实例?
EN

Stack Overflow用户
提问于 2012-04-30 22:42:59
回答 2查看 989关注 0票数 4

我有一个多程序集C# Excel插件,它可以跨程序集边界传递嵌入的互操作类型。当我在配置为使用.NET 3.5的Excel进程中运行它时,一切正常。当我在配置为使用.NET 4.0的Excel进程中运行此命令时,仅加载具有在外接程序程序集本身中定义的应用程序逻辑的控件。我想我理解其中的原因,因为在.NET 4.0中对嵌入式互操作类型的处理发生了重大变化,因此它们不能跨越程序集边界。让我困惑的是,我认为在Windows4.0中,可以在单个.NET进程中托管多个CLR实例。如果我的插件针对的是Excel3.5,为什么不能直接在.NET拥有的.NET 3.5CLR实例中运行呢?为什么Excel试图在.NET 4.0中运行我的外接程序?它不是一个真正的选项来重写插件,但它需要安装的客户端谁也使用.NET 4.0插件,所以它是不好玩注册表键或Excel.exe.config文件...任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 20:09:52

你标题中的问题的答案是“是”。.NET运行时版本2.0 (它是.NET Framework2.0、3.0和3.5使用的运行时版本)可以在一个进程中与.NET运行时版本4.0 (这是升级后的.NET Framework4.5也将使用的版本号)并行运行。

但是,VSTO的情况并不那么简单,因为Excel和VSTO运行时之间需要交互来决定要加载的内容。VSTO4基本上包括针对.NET 3.5 (在.NET 2.0运行时下)和.NET 4.0的独立版本的Office扩展。根据您针对的VSTO 4办公扩展的版本,您可以使用类(与较旧的VSTO兼容)或主要使用接口,因此VSTO API设计和代码也会略有不同,这取决于您使用的VSTO 4办公扩展的版本。然后,VSTO外接程序的部署和加载取决于您的目标VSTO Office extensions的版本。

因此,加载VSTO4外接程序的.NET运行时的版本与创建外接程序的方式相关联。点击这里阅读更多:http://msdn.microsoft.com/en-us/library/bb608603(v=vs.100).aspxhttp://msdn.microsoft.com/en-us/library/ee712596.aspx

如果您有其他COM组件,则可能是COM组件在不同版本的运行库中激活(例如在2.0运行库中),因此无法从基于4.0运行库的外接程序进行访问。COM互操作类型在.NET 4.0中更改的方式通常会使事情变得更好,因为运行库现在可以根据GUID等正确地识别从不同程序集定义的“相同”类型。

为了让生活更简单,我也可以推荐Excel-DNA (我自己开发的)。它是一个免费且简单的内插库,可以在.NET中制作功能齐全的Excel插件,而不需要使用VSTO。Excel-DNA允许您以任何版本的Excel和.NET的任何2.0+版本为目标。

票数 2
EN

Stack Overflow用户

发布于 2012-05-04 18:48:21

我对开发excel插件并不熟悉,但是你可以做到。

但是,在同一进程中使用不同版本的clr是自动完成的。

您可以阅读详细信息here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10385558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档