在interop(C++托管)项目中使用C#dll(使用Microsoft.bcl构建)

rpl*_*usg 5 c# c++ clr base-class-library c#-4.0

我们在.net4.0中有一个C#DLL,但是使用Microsoft.bcl,Microsoft.bcl.async,Microsoft.bcl.build,Microsoft.net.http构建.这些库来自nuget.我们有理由不转移到.net4.5但想要使用async,等待来自这些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   
---------------------------
Run Code Online (Sandbox Code Playgroud)

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

Han*_*ant 3

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

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

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

   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

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