簡體   English   中英

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

[英]Using C# dll (built with Microsoft.bcl) in interop(C++ managed) project

我們在.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   
---------------------------

代碼重現此問題: https//dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

我責備,肯定看起來像個臭蟲。 從屏幕截圖中的錯誤消息判斷,您使用的是VS2013。 非常無益的消息,它在VS2015中降低了但仍然失敗了。 奇怪的錯誤btw,似乎它對待你的C#項目用作框架程序集的Microsoft.Threading.Task程序集引用。 我之前沒有關於這個問題的SO問題,大多數程序員在沒有打機的情況下做到了這一點。

您應該考慮按照這樣做的方式來避免此錯誤。 如果使用“添加引用”對話框中的“瀏覽”按鈕,則只會出錯。 但是在使用項目引用時工作得很好,這是大多數程序員喜歡配置解​​決方案的方式。 因此,使用File> Add> Existing Project,選擇您的C#項目。 然后再次添加引用,但這次從Solution> Projects列表中選擇C#項目,而不是使用Browse按鈕。

如果由於某種原因這是不受歡迎的,那么你可以用另一種方式解決。 在文本編輯器中打開你的.vcxproj,記事本很好。 找到這個元素:

   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

並將版本號修改為v4.5 現在像使用Browse按鈕一樣添加引用,這次沒有任何抱怨。 然后返回記事本並將版本號更改回v4.0

如果沒有其他幫助,你可以嘗試反編譯你的DLL。 .Net組件易於拆卸。

再次編譯可能會解決問題(例如,你的nuget中的dll可能看起來是4.5,而不是4.0)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM