У меня есть две версии одного и того же проекта. Оба имеют ссылку на одну и ту же DLL, но в разных местах.

Первый csproj включает:

<Reference Include="Microsoft.Expression.Effects, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
   <SpecificVersion>False</SpecificVersion>
   <HintPath>..\..\..\3rdParty\Microsoft\Microsoft.Expression.Effects.dll</HintPath>
</Reference>

Второй csproj, использующий пакет NuGet, включает:

<Reference Include="Microsoft.Expression.Effects, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
   <HintPath>..\..\..\3rdParty\NuGet\packages\Microsoft.SDK.Expression.Blend.1.0.0\lib\net45\Microsoft.Expression.Effects.dll</HintPath>
</Reference>

Я пытаюсь понять причину этого. Могу ли я использовать для них тот же путь подсказки? Что выбрать?

0
YAKOVM 28 Июл 2020 в 18:53
Вы сами добавляли ссылки в оба проекта? Откуда взялась DLL в ..\..\..\3rdParty\Microsoft\Microsoft.Expression.Effects.dll?
 – 
thatguy
28 Июл 2020 в 19:45
-кто-то еще добавил ссылки (он больше с нами не работает) Я просто хочу понять причину, по которой 2 копии. Я понятия не имею, откуда был взят файл ..\..\..\3rdParty\Microsoft\Microsoft.Expression.Effects.dll. откуда я могу это знать? каковы преимущества взятого из nuget?
 – 
YAKOVM
28 Июл 2020 в 20:46
Во втором примере в проекте установлен пакет NuGet?
 – 
thatguy
28 Июл 2020 в 21:01
- я неt know iпроверю это. не могли бы вы объяснить, в чем разница между установленным и удаленным (но используемым) пакетом. и вообще, как мне подходить к дублированию использования dll, как здесь?
 – 
YAKOVM
28 Июл 2020 в 21:11
@thatguy-yes во втором примере пакет NuGet установлен
 – 
YAKOVM
28 Июл 2020 в 23:24

1 ответ

Лучший ответ

Первый проект

Microsoft.Expression.Effects.dll был скопирован в каталог ..\..\..\3rdParty\Microsoft\ вручную, а затем на него ссылались в Visual Studio, например, щелкните правой кнопкой мыши проект, затем Добавить> Ссылка ...> Обзор ... и выберите DLL в соответствующем каталоге.

Ваш бывший коллега, скорее всего, скопировал библиотеку из локальной установочной папки Expression Blend SDK ( или где-то еще ) в папку в решении, чтобы она всегда была доступна. В противном случае на библиотеку будет ссылаться из локальной установочной папки, и всем, кто работает над проектом, придется установить SDK в то же место, иначе ссылка не будет найдена.

Второй проект

Во втором случае пакет NuGet был установлен в проект через packages.config. Это всего лишь один механизм для управления пакетами в вашем проекте, который хранит информацию о связанных пакетах в файле с именем packages.config в вашем проекте. Чтобы установить пакет, щелкните правой кнопкой мыши проект и выберите Управление пакетами NuGet ... . На вкладке Установлено вы увидите, что используете пакет Microsoft.SDK.Expression.Blend.

Пакет может содержать множество различных артефактов, например библиотеки DLL. Сила пакетов заключается в том, что вы можете управлять зависимостями намного удобнее, чем с помощью обычного способа ссылки на библиотеки DLL, как в первом проекте. Когда вы устанавливаете пакет, в файле проекта автоматически будут ссылки на содержащиеся в нем библиотеки. Вы не добавляете и не изменяете эти ссылки самостоятельно, менеджер пакетов сделает это за вас. Давайте посмотрим на HintPath.

  • ..\..\..\3rdParty\NuGet\packages\ - это корневой путь, по которому пакеты устанавливаются и извлекаются.
  • Microsoft.SDK.Expression.Blend.1.0.0\ - корень конкретного пакета в версии 1.0.0
  • lib\net45\ - это внутренний путь пакета для библиотек для .NET Framework> = 4.5

Могу ли я использовать для них тот же путь подсказки? Что выбрать?

Как видите, вопрос скорее в том, следует ли вам использовать пакеты NuGet или справочные библиотеки вручную. Это зависит от требований вашего проекта. В общем, я рекомендую использовать пакеты NuGet, поскольку они значительно упрощают управление зависимостями. Однако, если для нужной библиотеки нет пакета, вам придется добавлять ссылки самостоятельно.

2
thatguy 29 Июл 2020 в 10:40