2016-10-26 48 views
5

mamy DLL C# w .net4.0, ale zbudowany przy użyciu Microsoft.bcl, Microsoft.bcl.async, Microsoft.bcl.build , Microsoft.net.http. Te biblioteki zostały pobrane z nuget. Mamy powody, aby nie przenosić się do .net4.5, ale chcemy korzystać z asynchronizacji, czekając na te biblioteki bcl. Wszystko działa poprawnie w C# projektów, ale nie mogliśmy dodać DLL w naszych projektów C++ międzyoperacyjnych, otrzymujemy ten błąd:Przy użyciu C# dll (zbudowany z Microsoft.bcl) w projekcie międzyoperacyjnym (C++ zarządzanym)

Dostajemy ten błąd, gdy staramy się, aby dodać odniesienie do projektu.

Nawet jeśli projekt clr interop jest również w .net4.0 i DLL, który dodajemy, jest również w .NET4.0, otrzymujemy ten błąd. Czy istnieje sposób, aby rozwiązać ten problem? Kod

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

odtworzyć ten problem: https://dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

+2

Proszę zawsze podawać tekstową reprezentację błędu. Nie dla ciebie, ale ze względu na indeksację stackoverflow, aby uniknąć powtórzeń. Rezultatem tego błędu jest prawdopodobnie to, że projekt C# jest zbudowany po C++. Spróbuj najpierw zbudować C# jeden, a następnie ręcznie zbuduj C++. – eocron

+0

zrobione, dzięki za wejścia. Nie, nie dotyczy to mnie. Otrzymuję ten błąd, gdy próbuję dodać C# dll jako odniesienie do projektu C++. – rplusg

+0

Czy próbowałeś zmienić bitness (x86/x64) aplikacji C# i C++? – Dmitry

Odpowiedz

3

I Repro, na pewno wygląda jak robaka. Sądząc po komunikacie o błędzie na ekranie, używasz VS2013. Bardzo niepomocna wiadomość, została stonowana w VS2015, ale wciąż kończy się niepowodzeniem. Dziwny błąd btw, wydaje się, że traktuje odwołanie do zestawu Microsoft.Threading.Task, że twój projekt C# używa jako zespołu szkieletowego. Żadnych wcześniejszych pytań SO na temat tego problemu, które znam, większość programistów ma to prawo bez konieczności walki z maszyną.

Powinieneś rozważyć zrobienie tego w taki sam sposób, jak to zrobić, aby uniknąć tego błędu. To się nie uda, jeśli użyjesz przycisku Przeglądaj w oknie dialogowym Dodaj odniesienie. Ale działa dobrze, gdy używasz odniesienia do projektu, tak jak większość programistów woli konfigurować swoje rozwiązanie. Więc użyj Plik> Dodaj> Istniejący projekt, wybierz swój projekt C#. Następnie dodaj odwołanie ponownie, ale tym razem wybierz projekt C# z listy Rozwiązania> Projekty zamiast przycisku Przeglądaj.

Jeśli z jakiegoś powodu jest to niepożądane, można obejść ten inny sposób. Otwórz .vcxproj w edytorze tekstu, Notatnik jest w porządku. Zlokalizuj ten element:

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 

I zmień numer wersji na v4.5. Teraz dodaj odniesienie, tak jak wcześniej, za pomocą przycisku Przeglądaj, tym razem bez reklamacji. I wróć do Notatnika i zmień numer wersji z powrotem na v4.0

+0

Istniejący raport o błędzie [jest tutaj] (https://connect.microsoft.com/VisualStudio/feedback/details/794976/in-ac-project-cannot-add-add-reference-to-ac-project), trudno sobie wyobrazić jest przydatne. –

+0

Próbowałem już prawie każdej opcji i kombinacji, nie wyszło.Złożyłem sprawę z połączeniami firmowymi Microsoft i są one mniej niż pomocne. Więc wysłałem tutaj z nagrodą. Dzięki za spojrzenie. – rplusg

0

Jeśli nic więcej nie pomoże, możesz spróbować dekompilować bibliotekę dll. .Net Złożenia są łatwe do odwrócenia.

Kompilowanie go ponownie może rozwiązać problem (na przykład dll z nuget może wyglądać na 4,5, a nie na 4.0).

+0

DLL od nuget są .net4.0, na pewno. Użyłem dezasemblera i informacji w nagłówku mówi .net 4.0. – rplusg