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#-4.0 - 在关闭和处置管道时修改C#powershell输出读取器迭代器

javascript - 如何从 ASP.NET 网站访问客户端计算机 USB 中的文本文件

c# - SharePoint - 将文件夹下载为 zip 文件

c++ - 如何正确地将 2D 图像纹理映射到 icosphere

c# - 在C#中更改默认字体对话框

c++ - 如何实现跨平台的类似cscope的基于文本的用户界面?

c++ - 不同机器上的段错误 11 行为

c# - 有没有一种快速的方法来格式化 XmlDocument 以便在 C# 中显示?

c# - ASP.NET Core MVC 通配符路由无法使用与另一个正在工作的设置相同的设置

c# - Farseer 物理 (Box2D) - 夹具绕点旋转