Dlaczego dostaję ikonę ostrzeżenia, gdy dodam odniesienie do projektu wtyczki MEF?

321

Chcę przetestować podstawową klasę wtyczki, bezpośrednio odwołując się do projektu wtyczki i tworząc instancję klasy wtyczki. Kiedy tworzę testowy projekt aplikacji konsoli i dodam odniesienie do projektu do projektu wtyczki, pojawia się ikona ostrzegawcza (żółty trójkąt z wykrzyknikiem) obok odniesienia na liście Odnośniki.

Gdy zamiast tego dodaję odwołanie do biblioteki DLL, asemblera zestawu danych wyjściowych wtyczki, nie otrzymuję takiego ostrzeżenia. Co to ostrzeżenie może mi powiedzieć?

ProfK
źródło
8
Przez większość czasu trójkąty ostrzegawcze będą miały podpowiedzi lub (jeśli to nie będzie) wpis w oknie błędów. Domyślnie oba projekty mają niezgodne zależności.
Damien_The_Unbeliever
2
Jakieś ostrzeżenia w konsoli podczas próby kompilacji?
Jite
231
Widziałem to z projektami ukierunkowanymi na różne wersje ramek .net
ręcznie
4
@OP czy możesz wybrać odpowiedź kad81 jako poprawną
Andy
5
To zawsze mnie dopada. Dodanie nowego projektu do rozwiązania .NET 4 i wartością domyślną jest 4.5.
Robin French,

Odpowiedzi:

674

Jak wspomniano w komentarzach do pytania, może to powodować różne wersje .NET Framework między projektami. Sprawdź właściwości nowego projektu, aby upewnić się, że nie jest używana inna domyślna wersja.

kad81
źródło
13
Muszę też wiedzieć, dlaczego studio wizualne zaakceptowało dodanie tych referencji?
Anders Lindén
16
Używam VS 2015 i problem nadal występuje. Straciłem pół godziny, zanim tu przybyłem.
Alisson
14
nawet tekst w
dymku
6
Potwierdza, że ​​to był przyczyna problemu. Może również potwierdzić, że program Visual Studio 2017 z aktualizacją 15.3 nadal nie rozwiązał problemu polegającego na tym, że faktycznie nie wyświetlał sensownego komunikatu. Bardzo irytujące.
Greg R. Taylor
4
@matao Zgoda! To denerwujące, że nie mogłem uzyskać żadnych szczegółów na temat błędu ...
nterry
74

Napotkano ten sam problem z aplikacją sieci Web ASP.Net i dwoma projektami klasy bibliotecznej, do których należało się odwoływać w aplikacji sieci Web. Nie podałem żadnych informacji o tym, dlaczego kompilacja nie powiodła się, a odwołania były nieprawidłowe.

Rozwiązaniem było zapewnienie, że wszystkie projekty miały takie same ramy docelowe:

W Visual Studio 2015- Kliknij prawym przyciskiem myszy projekt> Właściwości> Aplikacja> Struktura docelowa

Zapisz, wyczyść i przebuduj rozwiązanie. Odniesienia do projektu nie powinny już pojawiać się jako żółte ostrzeżenia, a rozwiązanie zostanie skompilowane.

Moja aplikacja sieciowa była ukierunkowana na .Net 4.5, podczas gdy dwa pozostałe zależne projekty klas bibliotek były ukierunkowane na .Net v4.5.2

kbarry
źródło
44

W przypadku obu (lub wszystkich) projektów, których chcesz używać razem:

Kliknij prawym przyciskiem myszy projekt> Właściwości> Aplikacja> Docelowa platforma .NET

Upewnij się, że oba (lub wszystkie) projekty korzystają z tej samej wersji środowiska .NET.

użytkownik3578181
źródło
Idealne, działało dla mnie! Miałem projekt MVC z .NET Framework 4.5.2. A moje biblioteki klas, które się do niego odwołują, to .NET Framework 4.7.
Mike Upjohn,
Można by pomyśleć, że nowe projekty dodane do istniejącego rozwiązania byłyby wystarczająco inteligentne, aby wiedzieć, która wersja, ale niestety tak nie jest.
Ron
38
  1. Upewnij się, że wszystkie wersje są takie same dla każdego projektu, kliknij każdy projekt i zobacz wersję tutaj Projekt> Właściwości> Aplikacja> Docelowa platforma .NET
  2. za. Przejdź do Narzędzia> Menedżer pakietów Nuget> Typ konsoli Menedżera pakietów Aktualizacja-Pakiet-Ponowna instalacja (jeśli nie działa, przejdź do 2.b )

    b. JEST TO KRYTYCZNE, ALE NAJWIĘKSZA MOŻLIWOŚĆ, KTÓRA DZIAŁA . Usuń <Target> Może z wieloma liniami </ Target> zwykle znajdującymi się w dolnej części .csproj.

  3. Zapisz, załaduj i skompiluj rozwiązanie.

Aljohn Yamaro
źródło
1
Dzięki za to miły komunikat o błędzie w Visual Studio na temat wersji .Net nie poszedłby tutaj na manowce!
colmde
1
@colmde co ciekawe, jeśli wyczyścisz rozwiązanie, okno wyjściowe wyświetli następujący komunikat: „Pakiet został przywrócony przy użyciu .NetFramework XXX zamiast docelowej struktury .NetFramework XXX. Pakiet może nie być w pełni kompatybilny z twoim projektem ”
elszeus
1
Część 2.b, która nie została odnotowana w innych odpowiedziach, była dla mnie krytyczna! 2.b Usuń <Cel> Może z wieloma liniami </ Cel> zwykle znajdującymi się w dolnej części .csproj.
shelbypereira
1
Część 2.b jest całkowicie szalona, ​​ale działa! dzięki
Elo,
1
Dzięki 2.b zrobiłem to samo dla mnie. NIGDY nie wymyśliłbym tego samodzielnie.
Henrik Clausen
23

Ponownie zainstaluj wszystkie pakiety we wszystkich projektach bieżącego rozwiązania:

Update-Package -Reinstall
Nitin Badole
źródło
2
Chociaż ta sugestia nie rozwiązała bezpośrednio mojego problemu, wskazała mi właściwy kierunek dla mojego scenariusza. Dla tych, którzy mogą pomóc, musiałem zmienić źródło pakietu NuGet na v3, aby pakiet aktualizacji znalazł odpowiednią wersję do pobrania: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee
1
Usunął wszystkie pakiety, zainstalował je i wróciły żółte trójkąty.
Anders Lindén
8

Upewnij się, że masz projekty kierowane na tę samą wersję frameworka . Najczęściej przyczyną jest to, że bieżący projekt (w którym dodajesz odniesienie do innego projektu) wskazuje inną wersję frameworku .net niż pozostałe .

użytkownik274294
źródło
5

Sprawdź NETFramework odnośnej biblioteki DLL i projektu, do którego dodajesz bibliotekę DLL. Np .: DLL ==> obsługiwane Wersja środowiska wykonawczego = „v4.0” Projekt ==> obsługiwane wersja środowiska wykonawczego = „v3.0”

Otrzymasz ikonę ostrzeżenia. Rozwiązanie: Zapewnij spójność wersji biblioteki DLL.

Sumit khare
źródło
5

Dla mnie napotkałem ten problem, odwołując się do biblioteki klas .NET Standard 2.0 w aplikacji konsolowej .NET Framework 4.7.1. Tak, frameworki są różne, ale są kompatybilne (.NET Standard powinien jive zarówno z .NET Core, jak i .NET Framework.) Próbowałem wyczyścić, przebudować, usunąć i odczytać referencje projektu itp. Bez powodzenia . Wreszcie zamknięcie programu Visual Studio i ponowne otwarcie rozwiązało problem.

Justin
źródło
4

Minęło dużo czasu, odkąd zadano to pytanie, ale jeśli ktoś jest nadal zainteresowany - ostatnio natrafiłem na podobne ikony. Kompilowałem projekt C # .net przy użyciu VS 2008. Odkryłem, że VS nie może zlokalizować zestawów dla tych odniesień. Po dwukrotnym kliknięciu VS odświeżyłem referencje i usunąłem ikony na niektórych z nich [EDYCJA: którą Mógł TERAZ zlokalizować]. Dla pozostałych odniesień musiałem skompilować odpowiednie zespoły.

Szczęśliwe miasto
źródło
4

Dodając moje 2 centy do odpowiedzi @ kad81,

Przejdź do Visual Studio -> BUILD -> Configuration Manager

W rozwijanej „Aktywnej platformie rozwiązań” w prawym górnym rogu (moja wersja to VS 2012), jeśli jest to „Platformy mieszane”, zmień ją na odpowiednią platformę w oparciu o referencyjne zespoły stron trzecich.

Następnie w każdym projekcie na liście upewnij się, że wybierasz tę samą platformę dla całego projektu. (jeśli x86 nie istnieje, wybierz „”, a następnie możesz wybrać „x86”.)

Najpierw przebuduj projekty bibliotek, a następnie odwołuj się do projektów. Mam nadzieję że to pomoże.

JenonD
źródło
4

Spróbuj zamknąć i otworzyć VS.

Wydaje się głupie, ale po 1 godzinie podążania za powyższym i znalezieniu wszystkiego w porządku. Zrestartowałem VS 2017 i problemy zniknęły.

Alex Stephens
źródło
1
Pracował dla mnie. Głupie czy nie, Visual Studio się myli i jego pamięć podręczna jest zepsuta. Dzięki za sugestię - nienawidziłem tego robić, ponieważ czułem się głupio myśląc, że to zadziała, ale co do cholery - po godzinie innych rzeczy równie dobrze mogę i tada to zadziałało
Blake
2

W Asp.net Core czasami wyświetla alert, jeśli zmienisz przestrzeń nazw lub nazwę projektu. Aby usunąć tego rodzaju alerty, po prostu zwolnij projekt i załaduj go ponownie. Jeśli problem nadal występuje, oznacza to, że nie można znaleźć numeru referencyjnego zespołu.

Tomcat0x4d2e47
źródło
1

Te ikony miałem z innego powodu. Mamy jedno duże rozwiązanie dla wszystkich naszych projektów (prawie 100). Dokonałem podselekcji projektów, którymi byłem zainteresowany i stworzyłem nowe rozwiązanie. Jednak referencje, w których referencje projektów zamiast referencji do skompilowanych bibliotek dll ...

Po kilku badaniach znalazłem ten link na GitHub który wyjaśnia, że ​​jest to nowe zachowanie w VS2015.

Na stronie GitHub wyjaśniają obejście dotyczące konwertowania odwołań do projektów na odwołania binarne.

Martijn
źródło
1

Aby naprawić niektóre niedziałające rzeczy, warto je usunąć czasami niektóre biblioteki, jak by to nie brzmiało dziwnie.

W każdym razie uważam, że problem jest zbyt szeroki i może być spowodowany różnymi czynnikami , więc chcę podzielić się moją sytuacją / rozwiązaniem.

Miałem projekt (przyniesiony przez klienta) z bibliotekami Xamarin Forms i Telerik. Ogólnie rzecz biorąc, chodziło o komponenty, których biblioteki nie znajdują się w folderze pakietów ani nie są dostępne za pośrednictwem Nuget (płatnych).

Cały projekt Referencje były „żółte”, wyglądało okropnie i przerażająco.

Rozwiązaniem było po prostu usunąć te Telerik referencje (w tym kilku kontroli w kodzie, które za pomocą tego). Zaraz potem wszystkie odniesienia w magiczny sposób uzyskały swój zwykły szary kolor, a błędy (głównie) zniknęły.

„Przeważnie” - ponieważ komunikaty o błędach „całkowicie czerwony wokół”, że „element nie jest nigdzie zdefiniowany” czasami się zdarzają. To dziwne i powoduje niedogodności, ale wciąż jestem w stanie skompilować i uruchomić projekt (y): wystarczy wyczyścić rozwiązanie, zrestartować Visual Studio, pomodlić się trochę, wyczyścić ponownie, usunąć foldery obj / bin, ponownie uruchomić ponownie, i to działa dobrze.

Kluczową sprawą jest usunięcie niedostępnych odniesień do bibliotek , ponieważ komunikaty o błędach mówią absolutnie inną rzecz. (Na przykład coś takiego jak „Xamarin.Build.Download.XamarinDownloadArchives nie znaleziono lub nie może czegoś znaleźć” itp., Ale to może oznaczać, że nie masz dostępnych odnośników.

Następnie usuń folder pakietów, załaduj ponownie / otwórz ponownie projekt / rozwiązanie, przejdź do „Zarządzaj pakietami Nuget” i kliknij przycisk „Przywróć”.

Agat
źródło
1

W programie Visual Studio 2019 ze wszystkimi projektami ukierunkowanymi na .Net Core 3.1 rozwiązaniem było:

  1. Wyczyść / Zbuduj / Odbuduj.
  2. Uruchom ponownie Visual Studio 2019
Riaan van Zyl
źródło
0

Też napotkałem ten sam problem, ale moja sprawa była nieco inna niż powyższe. Próbowałem otworzyć projekt utworzony na innym komputerze. Okazało się, że ścieżka do folderu pakietu nie jest aktualizowana po dodaniu odwołania, więc ponowne uruchomienie VS, zmiana wersji .NET lub dowolne wspomniane zalecenie nie rozwiązuje problemu. Otworzyłem plik csproj w Notatniku ++ i poprawiłem wszystkie ścieżki do folderu pakietów. Następnie; wszystkie ostrzeżenia zniknęły. Mam nadzieję, że to pomoże.

Ali
źródło
0

w VS 2017 Wykonaj Clean, a następnie Build

użytkownik1684037
źródło
0

Dziękuję wszystkim za pomoc. Oto opis tego, jak naprawiłem problem:

Kliknij prawym przyciskiem myszy swój projekt> Właściwości

W obszarze Aplikacja zmień docelową strukturę. W moim przypadku ImageSharp korzystał z .Net 4.6.1. Można to znaleźć w pliku packages.config.

Przejdź do referencji do projektu. Zauważysz, że SixLabors ma żółty trójkąt. Musisz zaktualizować pakiet NuGet.

Kliknij prawym przyciskiem myszy Referencje> Zarządzaj pakietami NuGet.

Zaktualizuj SixLabors.

Możesz mieć niewielkie aktualizacje kodu (patrz poniżej), ale to rozwiązało mój problem.

Konwertuj ImageSharp.Image na ImageSharp.PixelFormats.Rgba32?

PhoenixWright
źródło
0

W Visual Studio 2019 jednym z moich docelowych środowisk docelowych był rdzeń .net, ale odwoływał się do innego projektu, którego docelowym środowiskiem był standard .net. Zmieniłem wszystkie projekty, aby odwoływały się do standardu .net, a ikony zniknęły. Aby zobaczyć, jaki jest twój projekt, kliknij go prawym przyciskiem myszy, kliknij właściwości i spójrz na strukturę docelową. Możesz również normalnie kliknąć sam projekt i spojrzeć na znacznik <TargetFramework> w <PropertyGroup>

abovetempo
źródło
0

W rozwiązaniu obejmującym wiele projektów, jeśli każda inna rzecz zawiodła ... W projekcie startUp sprawdź. Zależności-> Zespoły i sprawdź, czy istnieje projekt z błędem, do którego istnieje odwołanie. Usuń go i przebuduj.

Babatunde Ahmed
źródło