Есть ли способ настройки источника пакета NuGet для каждого проекта? - PullRequest
1 голос
/ 21 октября 2019

Как установить расположение Nuget в csproject в ядре Net?

У нас есть официальные пакеты Microsoft для nuget, которые должны ссылаться на Nuget.org.

Другие пакеты, которые должны ссылаться наC: \ NugetFileShare, (Nugets для библиотек классов компании в частном репозитории Nuget)

В настоящее время мы используем формат ссылки на пакет.

В любом случае в файле Project xml указано состояние Nugetместоположение для каждого, и те, которые требуют местоположение частного Nuget?

Следующие обозначения на уровне решения, интересно, если это можно сделать из области уровня проекта? Ссылка на пакеты NuGet из каталога в решении

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <config>
      <add key="globalPackagesFolder" value=".\packages" />
    </config>
</configuration>

Другие ресурсы:

Можно ли настроить параметры источника пакета NuGet для решения?

1 Ответ

1 голос
/ 21 октября 2019

Есть ли способ? да. Будет ли работать так, как вы хотите? вероятно, нет.

Также не совсем ясно, что вы действительно хотите (это похоже на случай XY-проблемы . Если вы действительно хотите исходники для каждого проекта, вы не объяснилипочему), поскольку предоставленный вами фрагмент nuget.config задает расположение, которое NuGet будет загружать и извлекать пакеты. NuGet ищет пакеты для загрузки в разделе packageSources . Почему вы хотите, чтобы источники были разными для каждого проекта? Если вы ошибочно полагаете, что может быть только один источник, это неверно. Для решения вполне нормально иметь несколько источников пакетов. Даже код библиотек базовых классов .NET (corefx) использует 3 исходных кода пакета и Сам NuGet использует 7 источников .

Итак, вам, вероятно, понадобится nuget.config файл, который выглядит следующим образом, находится в том же каталоге, что и ваш .sln файл, или в корне вашего репозитория:

<configuration>
  <packageSources>
    <clear /> <!-- clear to make sure that everyone uses the same sources -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="company packages" value="C:\NugetFileShare" />
  </packageSources>
</configuration>

Теперь, если действительно есть веская причина, почему вам нужны исходные пакеты для каждого проектаПервое, на что следует обратить внимание, это то, что он может не работать в Visual Studio.

Один из способов - просто поместить файл nuget.config в каталог проекта (это определенно не будет работать в VS). Затем, когда вы непосредственно восстанавливаете только этот проект (восстановление файла решения не будет учитывать эту конфигурацию), он будет использовать этот файл конфигурации.

Поскольку вы пометили .NET Core, а .NET Core может использовать толькоПроект в стиле SDK, а в проектах в стиле SDK используется только PackageReference, а PackageReference восстанавливается с помощью MSBuild. Мы можем взглянуть на задачу восстановления MSBuild в NuGet, чтобы узнать, есть ли что-либо, что можно использовать для достижения этой цели. В этой строке используется свойство с именем RestoreAdditionalProjectSources. К сожалению, я не могу угадать синтаксис, который он хочет, но вы можете попробовать использовать <RestoreAdditionalProjectSources>C:\NugetFileShare</RestoreAdditionalProjectSources> в любом <PropertyGroup> в вашем файле проекта. Поскольку имя свойства - «дополнительные источники проекта», похоже, что оно должно работать при восстановлении из командной строки, даже при восстановлении решения. Я понятия не имею, работает ли он в Visual Studio. Это свойство MSBuild не будет работать для проектов, использующих packages.config.

...