Разные способы работы со ссылками на пакеты в csproj - PullRequest
0 голосов
/ 22 октября 2018

До сих пор я всегда использовал атрибуты для управления зависимостями активов для PackageReference (первый пример).Недавно, после использования диспетчера пакетов NuGet (в VS), я получил совершенно другой XML.

Оба контролируют одну и ту же вещь, может кто-нибудь помочь мне понять разницу и необходимость иметь два способа управления похожей вещью?

Дополнения к формату csproj для .NET Core> PackageReference

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" PrivateAssets="..." IncludeAssets="..." ExcludeAssets="..." />

Ссылки на пакеты (PackageReference) в файлах проекта> Управление активами зависимостей :

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
    <IncludeAssets>...</IncludeAssets>
    <ExcludeAssets>...</ExcludeAssets>
    <PrivateAssets>...</PrivateAssets>
</PackageReference>

1 Ответ

0 голосов
/ 22 октября 2018

Они функционально эквивалентны.За одним исключением, использование атрибутов в элементе <PackageReference> является ярлыком для наличия вложенных элементов с одинаковыми именами.Исключением является атрибут Include, который не может быть вложенным элементом.

Таким образом, Visual Studio, MSBuild, NuGet и т. Д. Будут обрабатывать их одинаково:

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<PackageReference Include="Contoso.Utility.UsefulStuff">
  <Version>3.6.0</Version>
</PackageReference>

То же самоеидет для других атрибутов, таких как «ExcludeAsset».

после использования диспетчера пакетов NuGet (в VS), я получил совсем другой XML, хотя.

Пакет NuGetМенеджер в VS не соблюдает исходный формат документа, когда он вносит изменения в ваши <PackageReference>.Вероятно, NuGet получает интерпретированный результат файла .csproj, а не необработанный XML, поэтому он не знает, использовали ли вы атрибуты или вложенные элементы.

...