【问题标题】:MMC .Net Runtime VersionMMC .Net 运行时版本
【发布时间】:2009-07-13 10:38:50
【问题描述】:

我目前正在开发一个 MMC 管理单元,但遇到了一个大问题 - 它是使用 .Net 4.0 框架完成的;并且 MMC 正在加载以前版本的运行时。

使用旧版本的运行时并不是一个真正的选择,因为整个项目都是为 4.0 编写的(到目前为止 5000 LOC);这只是一个管理前端(幻想:P)。

我检查了 MMC 注册表项,它的版本为 v4.0.20506。我在任何地方都找不到任何其他 MMC .Net 互操作配置。

有什么想法吗?

【问题讨论】:

  • 我假设您正在使用 Dev10 开发您的插件,对吧?你也在 64 位机器上运行吗?
  • @mfawzymkh 是的——我坐在那里

标签: .net clr c#-4.0 mmc


【解决方案1】:

进一步了解了这个问题,我可以确认主机进程必须通过 .NET 4.0 中的some new APIs 显式支持多个运行时。

我怀疑 MMC(即使在 Windows 7 中)是否支持这些 API,因为 .NET 4.0 也处于测试阶段。如果发生这种情况的可能性不大,您可以通过在配置中使用 supportedRuntime 元素来强制它使用它:

<configuration>
   <startup>
      <supportedRuntime version="v4.0.20506"/>
   </startup>
</configuration>

但是,如果做不到这一点,恐怕你就不走运了。那么您唯一的选择就是将您的项目更改为以 .NET 2.0 为目标。

或者,您可以编写一个托管它自己的运行时并加载您的托管运行时的非托管 MMC 管理单元。您对这些 .NET 4.0 功能的需求有多大?

【讨论】:

  • 谢谢。我要试一试——我有多需要它们?我个人编写的 6000 LOC 已升级到 Framework 4...
  • 这些行中有多少行具有 .NET 4.0 依赖项?您使用的是 EF4、WF4、动态关键字还是任何新的 API?如果没有,您可能只需很少更改即可运行 2.0。
  • 不 - 不会去 2.0。我有一堆自定义类(例如线程安全集合)现在在框架中;所以我摆脱了他们。最重要的是,我还没有(还)使用动态,但会。我想它必须等待更新。不过感谢您的帮助。应得的赏金!
【解决方案2】:

...或者您可以强制 MMC 使用具有以下环境变量的 v4.0:

set COMPLUS_Version=v4.0.30319

【讨论】:

    【解决方案3】:

    Microsoft 已经发布了这篇关于 MMC 和 CLR 版本的文章http://msdn.microsoft.com/en-us/library/windows/desktop/gg983006(v=vs.85).aspx 基本上,您创建了一个神奇的环境变量,将 CLR 启动定向到特定于您的 MMC 管理单元的配置文件。

    就我个人而言,我认为如果他们只是将 MMC.EXE 更改为使用 CLR 4,将会使每个人的生活更轻松,但出于某种原因,他们决定不朝那个方向发展。

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2017-08-16
      • 2010-10-12
      • 1970-01-01
      • 2012-01-24
      • 2019-11-28
      • 2016-05-20
      • 1970-01-01
      相关资源
      最近更新 更多