Как использовать переменные в nuget.config repositoryPath и csproj. Ссылка HintPath - PullRequest
0 голосов
/ 12 января 2019

Моя компания столкнулась с проблемой ссылки на пакет NuGet из-за использования нами Multi-Homed Projects :

Довольно часто включить проект в несколько решений. К сожалению, NuGet не может понять, когда это так. А поскольку NuGet использует папку пакетов на уровне решения, пути подсказок в проектах становятся относительно решения. Если есть несколько решений, использующих проект, эти относительные пути могут легко сломаться.

Я пытаюсь найти разумный способ удержать пути подсказок от взлома.

Одна из моих идей заключалась в том, чтобы использовать переменную среды для указания на папку общего пакета (аналогично тому, как это делает NuGet с проектами .NET Core).

Я пытался создать nuget.config, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <config>
    <add key="repositoryPath" value="%USERPROFILE%\.nuget\shared_packages" />
  </config>
</configuration>

И когда я устанавливаю пакет, он генерирует путь подсказки с относительным путем:

<Reference Include="QRCoder, Version=1.3.5.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>..\..\..\..\Users\Username\.nuget\shared_packages\QRCoder.1.3.5\lib\net40\QRCoder.dll</HintPath>
</Reference>

Это не будет работать на других машинах, поэтому мне нужно вручную отредактировать файл .csproj примерно так:

<Reference Include="QRCoder, Version=1.3.5.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>$(USERPROFILE)\.nuget\shared_packages\QRCoder.1.3.5\lib\net40\QRCoder.dll</HintPath>
</Reference>

Могу ли я настроить nuget.config (или что-то еще?), Чтобы путь подсказки использовал буквальное значение $(USERPROFILE)\.nuget\shared_packages, поэтому мне не нужно каждый раз вручную редактировать файл .csproj?

1 Ответ

0 голосов
/ 14 января 2019

Как использовать переменные в nuget.config repositoryPath и csproj Ссылка HintPath

Точно так же, как сказал Мэтт, « NuGet всегда использует относительные пути для ссылок, если вы используете файл packages.config. ». И, AFAIK, такой конфигурации нет в nuget.config (или что-то еще?), Чтобы заставить путь подсказки использовать буквальное значение $(USERPROFILE)\.nuget\shared_packages.

Чтобы решить этот вопрос, вы можете использовать ссылки на пакеты (PackageReference) вместо packages.config в файлах проекта. С PackageReference ваши пакеты будут указывать на папку общего пакета (аналогично тому, как это делает NuGet с .NET Core проектами), даже если вы используете .NET Framework.

Чтобы использовать PackageReference, перейдите в Инструменты-> NuGet PackageManager-> Управление пакетами настроек:

enter image description here

Затем вы можете добавить свои пакеты в ваш проект, все пакеты хранятся в C:\Users\<UserName>\.nuget\packages.

Кроме того, вы можете выполнить миграцию из packages.config в PackageReference для тех проектов, которые устанавливают пакеты с packages.config.

Надеюсь, это поможет.

...