gpt4 book ai didi

c++ - 互操作程序集引用了 .NET Framework 的哪些功能?

转载 作者:行者123 更新时间:2023-11-30 01:44:44 31 4
gpt4 key购买 nike

我们有一个包含大约 90 个项目的 Visual Studio 解决方案。其中大部分构建为 DLL 文件,有些是用 C++ 编写的,有些是用 C# 编写的。这些项目通过 COM 相互通信。我们使用 tlbexp 生成一些 C# 项目(C++ 项目中引用的那些)的 TLB 文件。我们使用 tlbimp 生成 C++ 项目的互操作 DLL。我没有完全深入这个主题,但我认为,互操作文件只是定义了 C++ 类的接口(interface),使它们可以从其他项目中使用,对吗?

现在,问题如下:为了将整个解决方案升级到 Visual Studio 2015 并使其针对 .NET 4.6.1 进行编译,我使用 JetBrains 的 dotPeek 检查了生成的程序集。我可以看到,所有 C# 项目都正确使用 .NET 4.6.1,C++ DLL 本身是本地的,不引用任何 .NET。现在,让我感到惊讶的是,dotPeek 告诉我,互操作 DLL(由 C++ 项目产生)正在引用 .NET 4.0。

在尝试让它们引用 .NET 4.6.1 和大量研究的“美妙”一天之后,我最终没有找到任何方法让互操作引用 .NET 4.6.1。这可能吗?我目前的猜测是,像这样生成的所有互操作 DLL 都只引用基本的 .NET 4.0,只是因为它使用与 .NET 4.6.1 相同的 CLR。​​

是吗?应该可以在任何安装了 .NET Framework 4.6.1 的系统上执行程序集,不是吗?

最佳答案

您从 dotPeek 获得了不良信息。它没有告诉您它是如何确定目标 .NET 版本的。它可以特定于编译器生成的 .NET 程序集。因为它会自动插入一个 [TargetFramework] attribute进入程序集,它会说明您在构建项目时选择的 .NET 版本。

但是互操作程序集不指定 .NET 版本,主要是因为它不是由编译器生成的。请注意您在运行 Tlbimp.exe 时从未指定版本。而且不能。 dotPeek 可以弄清楚的是它以 .NET 4 为目标,由元数据格式提示。没有比这更具体的了。

没关系,因为互操作库不使用 .NET Framework 功能。该库的唯一要点是您的程序可以使用 COM 组件功能。所以 dotPeek 报告的版本号并不重要;任何 .NET 4.x 框架都可以使用该库。

你没有真正的问题。

关于c++ - 互操作程序集引用了 .NET Framework 的哪些功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633682/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com