在C+中使用.NET Core 3.1 C#dll+;项目

在C+中使用.NET Core 3.1 C#dll+;项目,c#,c++,.net,c++-cli,language-interoperability,C#,C++,.net,C++ Cli,Language Interoperability,我是一家通才公司的软件开发人员。我们是一个小团队,我继承了一些有20年历史的软件(我想像很多公司一样) 该软件使用Visual Studio 2010以C/C++编写。其目的是与USB、以太网和蓝牙设备进行通信。在此之前,我们使用蓝牙加密狗与蓝牙设备进行通信。今天,我必须将蓝牙通信集成到PC中。为此,我使用了微软提出的示例,用C#编码: 为了得到我的手,我做了一个小工具,让我可以与我们的设备进行通信。现在我想将通信部分作为DLL集成到我们的软件中 因此,我正试图让用C/C++编写的软件(使用V

我是一家通才公司的软件开发人员。我们是一个小团队,我继承了一些有20年历史的软件(我想像很多公司一样)

该软件使用Visual Studio 2010以C/C++编写。其目的是与USB、以太网和蓝牙设备进行通信。在此之前,我们使用蓝牙加密狗与蓝牙设备进行通信。今天,我必须将蓝牙通信集成到PC中。为此,我使用了微软提出的示例,用C#编码:

为了得到我的手,我做了一个小工具,让我可以与我们的设备进行通信。现在我想将通信部分作为DLL集成到我们的软件中

因此,我正试图让用C/C++编写的软件(使用Visual Studio)与以.NET Core 3.1为框架的C#中的DLL进行通信

首先,我想从头开始,用C++创建一个简单的控制台应用程序,使用C#.NET Core 3.1 DLL中内置的函数。这使我能够验证C++/C#通信。然而,我已经讨论这个问题一周了,我开始失去希望

以下是我发现的一些来源:

但我无法将所有这些付诸实践

我做的最后一个测试如下:

C#.NET Core 3.1中的MyDll:

namespace MyDLL
{
    public class Class1
    {
        public static double add(double a, double b)
        {
            return a + b;
        }
    }
}

我的C++项目:

#include "pch.h"
#include "stdafx.h"
using namespace System;
#using "MyDLL.dll"

int main(array<System::String ^> ^args)
{
    double x = MyDLL::Class1::add(40.1, 1.9);
    return 0;
}
#包括“pch.h”
#包括“stdafx.h”
使用名称空间系统;
#使用“MyDLL.dll”
int main(数组^args)
{
double x=MyDLL::Class1::add(40.1,1.9);
返回0;
}
我的应用程序和我的DLL编译。应用程序很好地找到了DLL,显然在找到我的DLL的add函数时没有问题。但是,当我启动应用程序时,在mcrtexe.cpp的第247行出现以下错误:

System.IO.FileNotFoundException:“无法加载文件或程序集” System.Runtime,版本=4.2.2.0,区域性=neutral,PublicKeyToken= b03f5f7f11d50a3a'或其依赖项之一。指定的文件不能被删除 找不到。”

我准备用另一种方法测试。我所希望的就是能够使用C++中的DLL,使用.NETCore3.1和我的C++软件。如果你有什么建议,我正在听


致以最诚挚的问候

您可能只是有一个核心的3.1错误,很多人最近开始发现这个错误。如果使用3.1.14,请尝试此修补程序:我刚刚安装了您与我共享的SDK(带有.NET运行时3.1.14、ASP.NET核心运行时3.1.14和.NET桌面运行时3.1.14的SDK 3.1.408)。不幸的是,我仍然有错误:/Net library的哪个版本是您用来构建的?您需要使用NET4.7.2或更高版本。旧版本的Net targeting Core存在问题。3.1.13的下载页面上写着“在Windows上,我们建议安装托管捆绑包,其中包括.Net运行时和IIS支持。”因此,看起来微软通过建议安装两个软件包修复了3.1.13的一个问题。对于3.1.14,没有注释,因此我一直假设3.1.14使用3.1.13解决了问题。也许你应该回到3.1.13。@JonasH,好吧,但如果我理解正确的话,我的dll,在C#.NET核心3.1中,是被管理的,对吗?我必须与.NET核心3.1一起使用PC的蓝牙。目前我的C++项目是CLR控制台应用程序。我该怎么办?