【问题标题】:Compile Managed C++ Assembly Against Specific .NET Version (VS2008)针对特定的 .NET 版本编译托管 C++ 程序集 (VS2008)
【发布时间】:2011-09-16 19:42:43
【问题描述】:

我的托管 C++ 程序集遇到了一个奇怪的问题。即使我将 C# 项目和托管 C++ (DLL) 项目设置为目标 .NET 3.5,但当我编译托管程序集时,它的“运行时版本”是 2.0。

我正在尝试在 .NET 3.5 项目和 .NET 4.0 版本的 CSScript 中使用相同的程序集,并且 CSScript 拒绝使用 .NET 2.0 程序集运行(“运行时异常:混合模式程序集是针对版本构建的运行时的‘v2.0.50727’,如果没有额外的配置信息,无法在 4.0 运行时加载。”)。

我设法将问题定位为以下问题(所有工作都在 VS 2008 中完成):

  1. 我创建了一个面向 .NET 3.5 的 C# 项目。
  2. 我在同一个解决方案中创建了一个空的 C++ 项目。
  3. 将一个空的 .cpp 文件添加到 C++ 项目中。
  4. 更改 C++ 项目属性:Configuration Type = Dynamic Library (.dll),Common Language Runtime support = Common Language Runtime Support (/clr),并确保 Common Properties 的“Targeted Framework”设置为 3.5李>
  5. 编译 C++ 项目并将其添加为对 C# 项目的引用。

当您查看 C# 项目中引用的属性时,您会看到“运行时版本”是 v2.0.50727。我的问题是,到底是什么?

为什么是运行时版本 2.0?我将所有内容都设置为 3.5 ...如何强制托管 C++ 项目针对 .NET 3.5 进行编译?

谢谢, 马立克

【问题讨论】:

标签: c# .net c++ visual-studio-2008 managed


【解决方案1】:

运行时版本是指虚拟机的版本,而不是 .NET 类库。 .NET 3.5 在与 .NET 2.0 相同的虚拟机上运行,​​这就是您的参考显示 v2.0.50727 的原因。如果您想查看 C++ 项目是否真的针对 3.5 版本的框架,您应该检查该项目中的各个库引用。

【讨论】:

    【解决方案2】:

    您的“修复”实际上并不能解决问题。

    运行时异常:混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载

    您需要使用 4.0 运行时来避免这种情况,即使尝试一些神话般的“3.5”版本也没有意义。为此,您需要使用 VC++ 2010 编译器进行编译。因为您需要在 .NET 3.5 应用程序中使用它,所以这不是首发。

    尝试查看“其他配置信息”。请参阅this questionthis one

    【讨论】:

    • 感谢您的回答。我以为我可以在 4.0 中使用 3.5 内置的程序集,而不是 2.0?如果即使针对 3.5 编译的程序集也不起作用,那么是的,我在两个项目之间共享同一个 DLL 的尝试是没有实际意义的。我只需要澄清一下,因为我想我在某处读到 .NET 3.5 与 4.0 兼容(如“可以运行”),但任何低于 3.5 的都不是 ...
    • @marco:你错过了让它发挥作用的部分。阅读我链接到的问题。 2.0 和 3.5 都是一样的,也就是说,除非你改变了配置。
    • 重要信息是,在 .NET 4.0 中,所有以前的 .NET 版本都需要 app.config 文件,而不仅仅是我被引导相信的 2.0(所有示例都处理 2.0, 3.5 没有)。不幸的是,由于我不能在 CSScript(一种在执行之前即时编译 .NET 的脚本语言)中使用 app.config 文件,所以我只剩下两个版本的程序集,一个用于 3.5 项目,一个用于 4.0 脚本.再次感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多