2016-10-26 46 views
5

我們在.net4.0中使用了C#DLL,但使用Microsoft.bcl,Microsoft.bcl.async,Microsoft.bcl.build ,Microsoft.net.http。這些庫來自nuget。我們有理由不遷移到.net4.5,但希望使用異步,等待這些bcl庫。 一切都在C#項目工作正常,但我們不可能在我們的C++互操作的項目添加此DLL,我們得到這個錯誤:在interop(C++託管)項目中使用C#dll(使用Microsoft.bcl構建)

當我們嘗試添加此引用到項目中,我們得到這個錯誤。

即使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

+2

請始終提供錯誤的文本表示形式。不是爲了你,而是爲了避免重複而使用stackoverflow索引。你得到這個錯誤的原因可能是因爲C#項目是在C++之後建立的。嘗試先構建C#,然後手動構建C++。 – eocron

+0

完成,感謝您的投入。 不,那不是我的情況。當我嘗試添加C#dll作爲對C++項目的引用時,出現此錯誤。 – rplusg

+0

您是否嘗試過改變C#和C++應用程序的位數(x86/x64)? – Dmitry

回答

3

我瑞普,肯定看起來像一個錯誤。從截圖中的錯誤消息來看,您使用的是VS2013。非常沒有幫助的信息,它在VS2015中變得淡化,但仍然失敗。奇怪的錯誤btw,看起來像它對待Microsoft.Threading.Task程序集引用,您的C#項目用作框架程序集。我之前沒有提到有關這個問題的疑問,大多數程序員在沒有與機器對抗的情況下得到了正確的答案。

你應該考慮這樣做,以避免這種錯誤。如果使用「添加引用」對話框中的「瀏覽」按鈕,則這隻會出錯。但是,當你使用項目引用時工作得很好,大多數程序員喜歡配置他們的解決方案。所以使用File> Add> Existing Project,選擇你的C#項目。然後再次添加一個引用,但是這次從Solution> Projects列表中選擇C#項目,而不是使用Browse按鈕。

如果由於某種原因不希望出現這種情況,那麼您可以通過其他方式解決此問題。在文本編輯器中打開.vcxproj,記事本很好。定位此元素:

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 

並將版本號修改爲v4.5。現在像瀏覽按鈕那樣添加參考,這次沒有投訴。然後回到記事本並將版本號更改回v4.0

+0

現有的錯誤報告[在這裏](https://connect.microsoft.com/VisualStudio/feedback/details/7949​​76/in-ac-project-cannot-add-reference-to-ac-project),很難想象它是有用的。 –

+0

我已經嘗試了幾乎所有的選項和組合,沒有解決。提起微軟公司關係的案例,他們沒有什麼幫助。所以,我在這裏貼了一個賞金。謝謝你看看。 – rplusg

0

如果沒有其他幫助,您可以嘗試反編譯您的dll。 .Net組件很容易反轉。

再次編譯它可能會解決問題(例如,您從nuget的dll可能顯示爲4.5,而不是4.0)。

+0

從nuget的DLL是.net4.0,當然。我使用反彙編程序和標題信息說.net 4.0。 – rplusg