我们有一个包含大约 90 个项目的 Visual Studio 解决方案。它们中的大多数都是针对 DLL 文件构建的,有些是用 C++ 编写的,有些是用 C# 编写的。项目通过 COM 相互通信。我们使用 tlbexp 来生成一些 C# 项目(在 C++ 项目中引用的那些)的 TLB 文件。我们使用 tlbimp 生成 C++ 项目的互操作 DLL。我没有完全深入这个话题,但我认为,互操作文件只是定义了 C++ 类的接口,使它们可以在其他项目中使用,对吗?
现在,问题如下:为了将整个解决方案升级到 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 的系统上执行程序集,不是吗?