NuGet упаковывает зависимости проекта как зависимости nuget - PullRequest
0 голосов
/ 15 октября 2018

У меня есть 3 проекта библиотеки классов (все .NET Standard 2.0), которые находятся в одном решении.Я хочу упаковать их в один nuget и использовать код в других репозиториях.

Однако, когда я упаковываю их в пакет NuGet, два из них добавляются в качестве зависимости nuget к третьему, вместо прямой ссылки на них как на dll.

Вот пример моегоsetup.

3 проекта - A .csproj, B .csproj, C .csproj (все библиотеки классов, все стандарты .NET2.0)

A устанавливается в качестве запускаемого проекта и имеет ссылки B и C

B имеет ссылку на C

C не имеет ссылок на другие два (он только ссылается на 2 сторонних нюгетера)

Когда я упаковываюВ моем решении в пакет nuget файл nuspec имеет группу <dependencies>, в которой есть все ссылки на nuget из моего проекта ( правильный ), а также 2 зависимости для проектов B и C с версиями 1.0.0 ( неверно )

Я не уверен, что приводит к такому поведению nuget (я представляю его по своему замыслу), но не могуоберните мою голову вокруг, чтобы решить проблему.

Я хочу, чтобы проекты B и C были упакованы как библиотеки DLL для проекта A , а не как отдельные пакеты.

Ответы [ 3 ]

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

Я не уверен, что приводит к тому, что nuget ведет себя так (я представляю его по своему замыслу), но я не могу обернуться, чтобы решить проблему.

Да, это ведет себяэто дизайн.Когда мы упаковываем .net core / .NET Standard, теги метаданных PrivateAssets определяют, передаются ли активы зависимостей в родительский проект.Если установлено значение All, эти активы зависимости не будут переданы в родительский проект.Другими словами, проекты B и C не будут добавлены в пакет как зависимости.

Проверьте Управление активами зависимости для получения дополнительной информации.

То, что я хочу, этодля проектов B и C, которые должны быть упакованы как библиотеки DLL для проекта A, а не как отдельные пакеты.

Так же, как я сказал в первом вопросе, мы могли бы использовать PrivateAssets теги метаданных для управления активами зависимостипоток в родительский проект, но теги метаданных PrivateAssets не упаковывают проекты B и C как библиотеки DLL проекта A.

Если вы хотите, чтобы проекты B и C были упакованы как библиотеки DLL для проекта A, а не как отдельные пакеты, нам нужно использовать файл .nuspec, чтобы включить их вручную.

.nuspecкак:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>TestDemo</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>TestDemo</description>
    <releaseNotes>Summary of changes made in this release of the package.    </releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="bin\debug\projectA.dll" target="lib\.netstand2.0" />
    <file src="<Path>\projectB.dll" target="lib\.netstand2.0" />
    <file src="<Path>\projectC.dll" target="lib\.netstand2.0" />
  </files>
</package>

Проверьте эту тему для более подробной информации.

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

Похоже, вы хотите сгенерировать библиотеки DLL для B и C, а затем скопировать их в папку ресурсов для A, на которую есть ссылка в файле nuspec.То есть вы упаковываете только A, в который входят DLL для B и C, поэтому сборка B и C и добавление этих DLL в A должны происходить отдельно до упаковки A.

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

Необходимо обновить версию для зависимостей в .nuspec вручную / или с помощью некоторой команды / скрипта до / после сборки.Если вам нужно сделать это для большого количества проектов, я предлагаю написать сценарий и запустить его до / после сборки.

.nuspec не может самостоятельно определить версию для зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...