ostrzeżenie: wszystkie projekty odwołujące się do MyProject.csproj muszą zainstalować pakiet NuGet Microsoft.Bcl.Build

90

Mam aplikację ASP.NET MVC 4 opracowaną w programie VS 2012. Aplikacja składa się z projektu głównego (MyProject), projektu testów jednostkowych (MyProject.Tests), projektu wdrażania platformy Azure (MyProject.Azure) i kilku projekty bibliotek ogólnego przeznaczenia.

Kiedy klikam prawym przyciskiem myszy rozwiązanie lub główny projekt i wybieram Zarządzaj pakietami NuGet, widzę kilka aktualizacji firmy Microsoft, które najwyraźniej stały się dostępne w ciągu ostatniego miesiąca. Jeśli kliknę przycisk Aktualizuj wszystko, aktualizacje są najwyraźniej instalowane bez żadnych oczywistych problemów, ale kiedy buduję rozwiązanie, pojawia się ten komunikat o błędzie DWUKROTNIE:

warning : All projects referencing MyProject.csproj must install nuget package Microsoft.Bcl.Build

Ok, więc mam dwa projekty, które odwołują się do MyProject: MyProject.Tests i MyProject.Azure. Mogę kliknąć prawym przyciskiem myszy MyProject.Tests, wybrać ManageNuGet Packages i dodać Microsoft.Bcl.Build. To eliminuje jedno z dwóch ostrzeżeń. Ale VS nie daje mi opcji zarządzania pakietami NuGet dla projektu MyProject.Azure .

Jak dodać pakiet Microsoft.Bcl.Build do projektu wdrażania platformy Azure?

EDYTOWAĆ:

Dzięki wzrostowi użytkowników wiem, że został tu otwarty problem z Microsoft Connect dotyczący tego problemu .

Bob.at.Indigo.Health
źródło
2
Dzięki za odniesienie do problemu z połączeniem, to irytujący problem.
Paul Keister
1
W związku z ostrzeżeniem podczas budowania projektu wdrożenia występuje również błąd, który powoduje fałszywe ostrzeżenie podczas publikowania projektu. Błąd związany z publikowaniem jest również zgłaszany w Connect . Nie znam rozwiązania.
Edward Brey,
3
Ten sam problem występuje w przypadku projektów WiX, które zawierają odniesienia do innych projektów (w celu gromadzenia wyników projektu, czyli „ciepła”). Nie ma sensu, aby projekt instalatora WiX instalował pakiety NuGet! Argh !!
Jaans
2
Łącze do problemu z połączeniem zwraca teraz 404 connect.microsoft.com/VisualStudio/feedback/details/789839/…
Ryan Gates

Odpowiedzi:

54

Dwukrotne kliknięcie ostrzeżenia zawiera instrukcje dotyczące wyłączenia ostrzeżenia.

Bezpieczne jest wyłączenie dla odwołań do projektów z projektów, które nie obsługują jeszcze Nuget.

Zobacz poniżej część pogrubioną skopiowaną z Microsoft.Bcl.Build.targets.

BclBuildValidateNugetPackageReferences

Ten cel można wyłączyć dla odwołania do projektu, ustawiając SkipValidatePackageReferences = true dla odwołania:

<ProjectReference Include="..\pcl\pcl.csproj">
  <Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
  <Name>pcl</Name>
  <Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>
TheESJ
źródło
4
Arthur, czy możesz spróbować ustawić wartość metadanych AdditionalPropertes zamiast Właściwości?
TheESJ
5
@TheESJ Miałem ten problem z projektem WiX i wygląda na to, że ustawienie AdditionalProperties zamiast Properties działa. Chciałbym jednak wiedzieć, dlaczego
lc.
3
Działa to tylko w przypadku budowania rozwiązania, ale jeśli faktycznie użyjesz opcji „Uruchom” z projektem Azure jako projektem startowym, ostrzeżenia zostaną ponownie wyświetlone.
eoleary
2
Nie pracuj nawet nad kompilacją. VS 2015 Community Edition.
Artem
2
Nie działał w VS2015 Professional. Mam ten sam problem, dodając tę ​​linię.
aclalex
63

Odpowiedź udzielona przez TheESJ jest prawidłowa, jednak sformułowanie nie było dla mnie jasne. Ponieważ nie mogę skomentować odpowiedzi, podam tutaj więcej szczegółów. W szczególności miałem ten problem z platformą Azure projektem i konieczne było następujące obejście, aby ostrzeżenie zniknęło:

Dwukrotne kliknięcie ostrzeżenia w programie VisualStudio spowoduje przekierowanie do celu BclBuildValidateNugetPackageReferences w pliku Microsoft.BclBuild.targets. Nad rzeczywistym elementem docelowym powinieneś znaleźć duży blok komentarza, który mówi o wyłączaniu sprawdzania referencji projektu. Ponieważ projekty platformy Azure nie mogą mieć żadnych odwołań do bibliotek, nie jest możliwe, aby te projekty platformy Azure spełniały wymagania tego konkretnego celu kompilacji.

Rozwiązanie? Wyłącz sprawdzanie odwołań w projekcie platformy Azure, ponieważ nie można w rzeczywistości dodać odwołania do pakietu NuGet.

PRZYKŁAD

Załóżmy więc, że mamy dwa projekty: MyAzureProject.ccproj, który odwołuje się do MyProject.csproj . Wykonaj następujące kroki:

  1. Kliknij prawym przyciskiem myszy „MyAzureProject” w Eksploratorze rozwiązań i wybierz opcję „Edytuj plik projektu”.
  2. Znajdź odniesienie do projektu do „MyProject”. Powinien wyglądać mniej więcej tak:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
    </ProjectReference>
    
  3. Dodaj następujący element wewnątrz elementu ProjectReference:

      <Properties>SkipValidatePackageReferences=true</Properties>
    
  4. Twój numer referencyjny projektu powinien teraz wyglądać następująco:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
      <Properties>SkipValidatePackageReferences=true</Properties>
    </ProjectReference>
    
  5. Kliknij prawym przyciskiem myszy „MyAzureProject” w Eksploratorze rozwiązań i wybierz „Załaduj ponownie projekt”.

Teraz powinieneś być w stanie odbudować, a błąd powinien zniknąć.

AggieEric
źródło
17
W mojej wersji VS muszę najpierw kliknąć prawym przyciskiem myszy i „Zwolnij projekt”, zanim będę mógł kliknąć prawym przyciskiem myszy, aby edytować plik projektu
pius
2
Czy miałeś na myśli MyAzureProject.ccprojraczej niż MyAzureProject.csproj?
Edward Brey,
Działa tylko wtedy, gdy dodam „<Properties> SkipValidatePackageReferences = true </Properties>” do pliku * .csproj, do którego się odwołujemy. Samo edytowanie * .ccproj nie działa.
alexey
1
@pius To niewielka funkcja, ale dostępna jest opcja menu kontekstowego „Edytuj plik projektu” w obszarze „Zaawansowane polecenia” w narzędziu Productivity Power Tools , dostępna dla kilku wydań VS. Zwolni projekt i otworzy plik projektu jednym kliknięciem.
Jeff
16

Napotkałem ten sam problem i próbowałem zaktualizować Microsoft.Bcl.Build.targets; co nie pomogło.

Po pewnym dochodzeniu ustalono, że plik .csproj projektu usługi Azure musi zostać zmodyfikowany w celu uwzględnienia<Properties>SkipValidatePackageReferences=true</Properties> .

Nie wynikało to z odpowiedzi @TheESJ, dlatego postanowiłem zamieścić osobną odpowiedź. Dzięki @TheESJ.

Santosh
źródło
2

Napotkałem ten problem wiele razy, a metoda Właściwości rzeczywiście działa, ale podczas pracy z projektem Wix musiałem zamiast tego wykonać następujące czynności:

<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>

Kiedy użyłem węzła Properties Xml, pojawił się nowy błąd:

Właściwość OutputPath nie jest ustawiona dla projektu „MyInstallerProject.csproj”. Sprawdź, czy dla tego projektu określono prawidłową kombinację konfiguracji i platformy. Konfiguracja = „Debuguj” Platforma = „x86”. Ten błąd może się również pojawić, jeśli inny projekt próbuje podążać za odniesieniem projektu do projektu do tego projektu, ten projekt został zwolniony lub nie jest uwzględniony w rozwiązaniu, a projekt odniesienia nie jest kompilowany przy użyciu tego samego lub równoważnego Konfiguracja lub platforma.

ozz
źródło
0

Po nieudanym rozwiązaniu problemów z żadną z powyższych odpowiedzi, po prostu postępowałem zgodnie z instrukcjami zawartymi w pliku Microsoft.Bcl.Build.targets (wyświetlanym po dwukrotnym kliknięciu błędu w oknie wyników kompilacji). Zwolniłem projekt (odwołując się do pakietów platformy Azure), napotykając błąd. Edytowałem plik projektu i wstawiłem następujące ...

<PropertyGroup>
      <SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>

... na górze pliku projektu przed pierwszą PropertyGroup.

Mick
źródło