c# - 在互操作(C++ 管理)项目中使用 C# dll(使用 Microsoft.bcl 构建)

标签 c# c++ c#-4.0 clr base-class-library

我们在 .net4.0 中有一个 C# DLL,但使用 Microsoft.bcl、Microsoft.bcl.async、Microsoft.bcl.build、M​​icrosoft.net.http 构建。这些库来自 nuget。我们有理由不迁移到 .net4.5,但想使用异步,等待这些 bcl 库。 在 C# 项目中一切正常,但我们无法在 C++ 互操作项目中添加此 DLL,我们收到此错误:

当我们尝试将此引用添加到项目时出现此错误。

即使 clr interop 项目也在 .net4.0 中,并且我们添加的 DLL 也在 .net4.0 中,但我们最终会收到此错误。有办法解决这个问题吗?

Error in text format:
---------------------------
Microsoft Visual Studio
---------------------------
Could not add a reference to:

C:\xxx\xxx\xx\xxxHelper.dll



For one of the following reasons:

    - Targets a higher version of the .NET Framework

    - Not a .NET assembly

    - Not a registered ActiveX control
---------------------------
OK   
---------------------------

重现此问题的代码:https://dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

最佳答案

我重现,确实看起来像一个错误。从您截图中的错误信息来看您使用的是 VS2013。非常无益的消息,它在 VS2015 中被淡化但仍然失败。奇怪的错误顺便说一句,它似乎将您的 C# 项目用作框架程序集的 Microsoft.Threading.Task 程序集引用。据我所知,之前没有关于这个问题的 SO 问题,大多数程序员无需与机器打架就可以解决这个问题。

您应该考虑按照他们的方式来避免此错误。如果您使用“添加引用”对话框中的“浏览”按钮,这只会出错。但是当您使用项目引用时效果很好,这是大多数程序员喜欢配置他们的解决方案的方式。因此,请使用"file">“添加”>“现有项目”,选择您的 C# 项目。然后再次添加引用,但这次从解决方案 > 项目列表中选择 C# 项目,而不是使用浏览按钮。

如果出于某种原因这是不受欢迎的,那么您可以通过其他方式解决这个问题。在文本编辑器中打开 .vcxproj,记事本就可以了。找到这个元素:

   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

并修改版本号为v4.5。现在像以前一样使用浏览按钮添加引用,这次没有提示。并返回记事本并将版本号更改回 v4.0

关于c# - 在互操作(C++ 管理)项目中使用 C# dll(使用 Microsoft.bcl 构建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258860/

相关文章:

c# - Fluentvalidation 无法使用本地化名称

c# - 如何在 asp.net 图像控件上绘制几何形状以创建图像映射?

c# - 如何将 byte[] 转换为 BitArray,然后从 BitArray 中选取特定位

c# - 如何使用 GDI+ 绘制圆环( donut )?

C# 合并运算符抛出

C# - 装箱/拆箱/类型转换整数的问题。我不明白

c# - Winforms - 在另一个线程中调用方法

c++ - constexpr 构造函数不被称为隐式类型转换的 constexpr

c++ - 使用鼠标事件计算相机的位置和旋转

C++ : Fast searching in 2d array