Що означають жовті попереджувальні трикутники на залежностях у Visual Studio 2017?


109

Я щойно перетворив свою бібліотеку PCL на нову бібліотеку .Net Standard, і у мене є кілька трикутників жовтого попередження на моїх залежностях, показаних нижче:

введіть тут опис зображення

Під час перетворення він переніс усі nuget-пакети, включаючи залежності, щоб він міг бути дулікатом.

Як дізнатись, що являють собою жовті попереджувальні трикутники?

РЕДАГУВАТИ

Журнали побудови:

Щоб запобігти відновленню NuGet пакетів під час збірки, відкрийте діалогове вікно «Параметри Visual Studio», клацніть на вузлі «Диспетчер пакетів» і зніміть прапорець «Дозволити NuGet завантажувати відсутні пакети під час збірки». NU1605: Виявлено зниження версії пакета: NUnit з 3.8.1 до 2.6.4. Посилання на пакет безпосередньо з проекту, щоб вибрати іншу версію.
MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (> = 3.8.1)
MyProj.UI.Tests -> NUnit (> = 2.6.4) NU1605: Виявлено зниження версії пакета: NUnit з 3.8.1 до 2.6.4. Посилання на пакет безпосередньо з проекту, щоб вибрати іншу версію. MyProj.UI.Tests.iOS -> MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (> = 3.8.1) MyProj.UI.Tests.iOS -> NUnit (> = 2.6.4) NU1605: Виявлено зниження версії пакета: NUnit з 3.8.1 до 2.6.4. Посилання на пакет безпосередньо з проекту, щоб вибрати іншу версію.
MyProj.UI.Tests.Android -> MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (> = 3.8.1) MyProj.UI.Tests.Android -> NUnit (> = 2.6.4)


Наведіть на них курсор, і це вам скаже. Найчастіше це відбувається тому, що він не може їх знайти / вирішити або існує конфлікт. Якщо ви також заглянете у вікно Помилка, воно схильне пояснити помилку у рішенні.
Nkosi

57
Наведення курсора на них @Nkosi нічого для мене не показує
user1

2
Ці посилання використовуються під час побудови вашої програми. Але вони мають значення і для IDE, вона повинна їх вирішити, щоб забезпечити IntelliSense. Якщо це не вдається, ви отримуєте попереджувальний трикутник. Щоб отримати повідомлення про помилку, використовуйте Build> Build.
Ганс Пассант,

33
Коли це сталося зі мною, попереджень про збірку не було. Піктограма попередження просто застрягла в інтерфейсі користувача. Вивантаження та перезавантаження проекту виправили це.
StackOverthrow

1
@TKK: Я думаю, це триває лише кілька хвилин, тоді апеляр трикутників в інтерфейсі. Принаймні так трапилося зі мною після повторного відкриття рішення. Спочатку я думав, що це виправлено, але потім раптово знову з’явились попереджувальні трикутники.
PussInBoots

Відповіді:


78

Як би банально це не звучало, спробуйте відновити, а потім перезапустити VS - і продовжуйте свій день :)


5
Дякуємо за нагадування про класичне рішення "спробуйте перезапустити" :). Провів останню годину, дивуючись, чому VS видаляє мої пакунки, коли я будував своє рішення. Я перезапустив VS, і все запрацювало, як очікувалося. / ugh
Райан Е.

1
Класичний "закрив" своє рішення не завжди для всіх
негараздів

Я щойно оновив свій Visual Studio 2019 останньою версією (16.5.1), а точніше. І проблема все ще існує, але це рішення все ще працює :)
Віллі Девід-молодший

Вимкніть і ввімкніть знову :-D
Дон Ч

63

запустіть, dotnet restoreперш ніж виконувати будь-які складні маніпуляції, ви отримаєте набагато більше інформації, ніж у вікні помилок або у досліднику рішень.

Ви можете запустити цю команду в консолі диспетчера пакетів:

Інструменти> Менеджер пакунків NuGet> Консоль менеджера пакетів


4
Просто повторне відкриття рішення замість перезапуску VS працювало і для мене.
Квідо

чому я повинен відновити dotnet? хіба збірка не повинна цього робити?
pabrams

11

У журналі побудови я випадково помітив це:

C: \ Program Files \ dotnet \ sdk \ 2.0.2 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (199,5): попередження: посилання PackageReference для 'NETStandard.Library' було включений у ваш проект. На цей пакет неявно посилається .NET SDK, і зазвичай вам не потрібно посилатися на нього зі свого проекту. Для отримання додаткової інформації див. Https://aka.ms/sdkimplicitrefs

Тому я пішов і видалив усі пакети, які були перераховані як залежності для переліченого тут .Net Standard nuget :

.NETStandard 1.1

  • Microsoft.NETCore.Platforms (> = 1.1.0)

  • System.Collections (> = 4.3.0)

  • System.Collections.Concurrent (> = 4.3.0)

  • System.Diagnostics.Debug (> => 4.3.0)

  • System.Diagnostics.Tools (> = 4.3.0)

  • System.Diagnostics.Traing (> = 4.3.0)

  • System.Globalization (> = 4.3.0)

  • System.IO (> = 4.3.0)

  • System.IO.Compression (> = 4.3.0)

  • System.Linq (> = 4.3.0)

  • System.Linq.Expressions (> = 4.3.0)

  • System.Net.Http (> = 4.3.2)

  • System.Net.Primitive (> = 4.3.0)

  • System.ObjectModel (> = 4.3.0)

  • System.Reflection (> = 4.3.0)

  • System.Reflection.Extensions (> = 4.3.0)

  • System.Reflection.Primitive (> = 4.3.0)

  • System.Resources.ResourceManager (> = 4.3.0)

  • System.Runtime (> = 4.3.0)

  • System.Runtime.Extensions (> = 4.3.0)

  • System.Runtime.InteropServices (> = 4.3.0)

  • System.Runtime.InteropServices.RuntimeInformation (> => 4.3.0)

  • System.Runtime.Numerics (> = 4.3.0)

  • Кодування System.Text.Encoding (> = 4.3.0)

  • System.Text.Encoding.Extensions (> = 4.3.0)

  • System.Text.RegularExpressions (> = 4.3.0)

  • System.Threading (> = 4.3.0)

  • System.Threading.Tasks (> = 4.3.0)

  • System.Xml.ReaderWriter (> = 4.3.0)

  • System.Xml.XDocument (> = 4.3.0)

І жовті попередження зникли.

Звідси: https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-standard-2-0/

Я також виявив, що ви можете використовувати властивість NoWarn, як показано нижче:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

8

Жовтий трикутник означає, що фізичні файли пакунка зникли і більше не доступні на жорсткому диску.

Зазвичай це трапляється під час надсилання get latest versionзапиту на керування джерелом у TFS, особливо при використанні нової машини, і ви хочете отримати код проекту з сервера TFS.

Це також може бути спричинено тим, low quality internet connectionщо майже завжди призведе до втрати даних або пошкодження завантажених файлів.

введіть тут опис зображення

Якщо в проблемі бракує декількох пакунків, ви можете змінити packages.configфайл та видалити ці пакети із packages.configта заново встановити відсутні пакети через менеджер пакунків nuget.

Але якщо в проблемі бракує декількох пакунків, найкращим і швидким способом отримання відсутніх пакетів є:

  1. Відкриття нового екземпляра візуальної студії
  2. Створіть нове проектне рішення з таким самим типом проекту, як те, у якому відсутні пакети (Приклад: ASP.Net MVC з індивідуальним обліковим записом користувача)
  3. Оновіть пакети нового проекту до останнього, щоб вони відповідали версіям пакетів попереднього рішення проекту
  4. Відкрийте провідник файлів і перейдіть до папки пакетів у новому створеному вами рішенні
  5. Скопіюйте весь вміст папки Packages, вибравши все. Зверніть увагу , НЕ копіюйте саму папку Packages лише вміст всередині папки
  6. Вставте це у своє попереднє рішення (рішення з відсутніми пакунками) у Packagesпапку із заміною існуючих елементів.
  7. Перейдіть до папки ваших пакунків у провіднику рішень і розгорніть її, а потім натисніть кнопку оновлення, щоб побачити, що багато відсутні пакети зараз відображаються без жовтого трикутника
  8. Нарешті, у вас з’явиться пара відсутніх пакетів, які не входять за замовчуванням при створенні нового рішення, вам потрібно видалити їх із файлу package.config (файлу, який читає менеджер пакунків nuget) для визначення встановлених пакетів, встановити їх як нові за допомогою менеджера пакунків nuget.

Зверніть увагу, що такі проблеми, пов’язані з відсутніми файлами у проектах, завжди важко виправити, і це залежить від досвіду розробника, тому не чекайте простого рішення для цього.

Що стосується причини помилки, Microsoft каже, що це помилка, але це може статися в будь-якій версії Visual Studio.


1
Що стосується проектів, перезапуск Visual Studio (2019), здавалося, це виправив для мене.
Steve Smith

пакетів немає
.coinfig

7

Просто для документації для нової людини з цим питанням спробуйте це, і ви запам’ятаєте мене: D

Якщо ви перейдете до: Інструменти> Адміністратор NuGet> Конфігурації. і ви позначили "Дозволити nuget ...." та "автоматично перевіряти ....".

Єдине, що вам потрібно зробити, це натиснути на кнопку "Очистити всі кеші NuGet"

Ось і все, вам не потрібно редагувати посібник, що може бути небезпечним, повірте мені, раніше мені потрібно було виконати деякі кроки, ніж описати тут багато часу, і спробувати більше 5 кроків офіційної документації Microsoft для це питання ви можете перевірити тут: https://docs.microsoft.com/es-es/nuget/consume-packages/package-restore#restore-packages-automatically-using-visual-studio

Але лише очищення кешу вирішує всі проблеми


За це слід проголосувати далі по ланцюжку відповідей ..
GregD

7

Якщо у вас є піктограма попередження, але попереджень немає, і нічого насправді не є неправильним, клацніть правою кнопкою миші проект> Вивантажити проект> ще раз клацніть проект ще раз> Перезавантажити проект Піктограма з’явилася на мить, а потім була очищена для мене у Visual Studio 2019. Це дозволяє уникнути повного перезапуску Visual Studio.


2

Як не дивно, але для мого проекту .Net Core 3 мені потрібно було просто натиснути "Завантажити залежності проекту" у контексті проекту, тоді піктограма попередження зникла.

Корисний знімок екрана:

введіть тут опис зображення


1

Я щойно оновив Visual studio до 16.4.4, і проблема була вирішена. Посилання фіксоване, і жодного трикутника більше немає. Дякую.


1

Я зіткнувся з цією помилкою, коли клоную проект. основною причиною було те, що пакети Nuget не змогли відновити, і я знаходжу рішення, роблячи nuget.org лише активним ресурсом.

введіть тут опис зображення

Обов’язково виберіть Nuget.org як єдиний активний ресурс.

Сподіваюся, це допоможе


1

Жовтий знак оклику зазвичай пов’язаний з відсутністю посилання або непідтримуваною dll. Якщо ви клонуєте сховище, то є ймовірність того, що багато пакетів самородків покажуть жовтий вигук. Якщо ви перевірили правильність версії проекту, але проблема все ще існує, ви можете спробувати вказане нижче рішення.

У консолі менеджера пакетів виберіть проект, у якому ви стикаєтесь із цією проблемою, а потім введіть таку команду.

Update-Package -Reinstall

Це змусить переінсталювати всі пакети. Ця команда не оновить версію пакетів NuGet, вона просто змусить їх перевстановити.

Це рішення спрацювало в моєму випадку. Я використовую VS2019. Сподіваюся, це допоможе і іншим.


0

Може бути 1 пакет, який може спричинити не завантаження всіх інших. спробуйте коментувати пакети з .csproj по одному та з’ясуйте, який із них є проблемою, щоб звузити його.


0

Якщо я намагаюся видалити, Microsoft.NETCore.Platformsяк зазначено у позначеній відповіді, я отримую таку помилку:

Не вдається видалити 'Microsoft.NETCore.Platforms.1.1.0', оскільки від цього залежить 'NETStandard.Library.2.0.3'.

Я видалив інші пакети, але все одно отримую NETSDK1023помилку:

До вашого проекту було включено посилання PackageReference для 'NETStandard.Library'. На цей пакет неявно посилається .NET SDK, і зазвичай вам не потрібно посилатися на нього зі свого проекту. Для отримання додаткової інформації див. Https://aka.ms/sdkimplicitrefs

Тепер я відредагував .csproj і видалив наступну частину

<PackageReference Include="NETStandard.Library" Version="2.0.3" />

як зазначено в https://aka.ms/sdkimplicitrefs у розділі Рекомендації :

При націлюванні на .NET Core або .NET Standard ніколи не майте явного посилання на Microsoft.NETCore.Appабо NETStandard.Libraryметапакети через <PackageReference>елемент у файлі проекту.

Тепер попередження зникло!


0

Жодне з перерахованого не працювало для мене. У мене був один проект у рішенні із попереджувальними трикутниками про залежності від інших проектів у рішенні, що спричинило багато червоних помилок у VS. Однак це могло б створювати, запускати та налагоджувати дуже добре. Нарешті я завантажив проект, клацнувши правою кнопкою миші на назві проекту в дереві рішень, а потім перезавантажив проект, і зараз все задоволено. Дякую Visual Studio, smh. Я використовую VS 2019 16.7.1


0

Перезапустіть машину

Я вважаю, що в моїй ситуації було те, що якийсь процес не випускав певні dll після очищення кешу, а потім будь-яке придбання dll не вдалося через цю блокування (?).

Перезавантаживши машину та donet restoreвирішивши проблему, я міг побудувати знову без помилки відсутнього пакета.


-3

Якщо у вас немає проблем з оновленням усіх пакетів NuGet, які можуть вирішити цю проблему.

Меню Інструменти -> Менеджер пакунків NuGet -> Керування пакетами Nuget для рішення . Коли з’явиться це меню, натисніть вкладку « Оновити » та натисніть кнопку « Оновити все ».


4
Хіба це не оновить всі пакети до останньої версії? Це може бути небажаним, якщо потрібна конкретна (не остання) версія одного або декількох пакетів.
Герцен

Якщо ви вже використовуєте останні пакети, це відмінне рішення. Виправлено мою проблему відразу.
n4rzul

1
Це не завжди рішення. Іноді в рамках проекту є пакети, які не слід оновлювати.
Карас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.