Я начал с чтения предложенного вопроса, похожего на мой, но решения не было: почему MSTest.TestAdapter добавляет свои библиотеки DLL в мой пакет NuGet?
Краткое описание проблемы
Я написал пакет NuGet и каждый раз устанавливал его, NUnitи NUnit3TestAdapter .dllменя добавляли в проект, на который я устанавливал. Я хочу найти решение, которое решает эту проблему.
Репро шаги
Я добавил два git-репозитория, которые воспроизводят описанную мной проблему.
ClientLibrary/ MainFramework(проект, из которого я создал пакет NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(спроектируйте этот пакет для установки) - https://github.com/harbourc/target-project-repro-nuget-issue
Вы можете клонировать оба репозитория, восстановить их пакеты NuGet и воспроизвести проблему следующим образом:
Найдите ClientLibrary.1.0.0.nupkg в client-library-repro-nuget-issue / ClientLibrary /
Откройте консоль диспетчера пакетов для target-project-repro-nuget-issue и запустите
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Обратите внимание на
NUnitиNUnit3TestAdapter.dll, которые добавленыTargetProject- даже если ониTargetProjectуже естьNUnitиNUnit3TestAdapterустановлены.
Более длинный обзор
Я создал свой собственный пакет NuGet для внутреннего использования под названием ClientLibrary, и я пытаюсь установить его в другой проект под названием TargetProject. Вот быстрая разбивка структуры:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkgгенерируется из этого
Отдельный проект:
TargetProject.slnTargetProject.csproj-> установить.nupkgна это
ClientLibraryимеет ссылку MainFrameworkи использует много методов из MainFramework.
При установке ClientLibrary.1.0.0.nupkgна него добавляются TargetProjectследующие .dllэлементы TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Если я удаляю их .dll, все работает нормально, потому TargetProjectчто эти пакеты уже установлены. Они не нужны, просто раздражает необходимость их удалять при установке.
Вот как я добавляю ClientLibraryпакет NuGet TargetProject:
- Сборка
ClientLibraryиMainFrameworkпроекты для создания своих .dll - Перейдите в
ClientLibraryпапку и запуститеnuget spec
.nuspec файл генерируется:
<?xml version="1.0"?>
<package >
<metadata>
<id>ClientLibrary</id>
<version>1.0</version>
<title>Client Library</title>
<authors>Myself</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Client library for interacting with my application.</description>
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
</package>
Выполнить
nuget pack -IncludeReferencedProjects- потомуClientLibraryчто зависит отMainFramework(и нескольких других используемых пакетовMainFramework)Перейдите к
TargetProject, откройте Консоль диспетчера пакетов- Запустить
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Установка проходит успешно, а затем .dllя жаловался на добавление.
Проблема:
MainFrameworkимеет NUnitи NUnit3TestAdapterNuGet пакеты установлены. ClientLibrary не. Таким образом, .dllкажется, что они добавлены, потому что они установлены MainFramework, но НЕ установлены ClientLibrary. (Помните, ClientLibraryссылки MainFramework.dll.)
Есть и другие пакеты, установленные на обоих, MainFrameworkи ClientLibrary, и они не имеют .dllдобавленных TargetProjectпри установке, поэтому я предполагаю, что проблема вызвана наличием пакетов в, MainFrameworkно НЕ в ClientLibrary.
Я считаю , что может «исправить» эту проблему путем установки NUnitи NUnit3TestAdapterна ClientLibrary, но на ClientLibraryсамом деле не использовать эти пакеты на всех, так что кажется ненужным.
Как я могу установить ClientLibraryна TargetProjectбез включения NUnitи NUnit3TestAdapter .dll«с, и без необходимости устанавливать NUnitи NUnit3TestAdapterна ClientLibrary? Если возможно, я хотел бы сказать, ClientLibrary.1.0.0.nupkgчтобы использовать NUnitи NUnit3TestAdapterпакеты, которые уже установлены на TargetProject.
Если ответ «Не возможно», то это хорошо, но я хотел бы получить объяснение - моя общая цель для этого вопроса - лучше понять, как работает NuGet и зависимости, и понять, почему это было проблемой в первое место. Спасибо за чтение.
ClientLibraryиспользует только некоторые части MainFramework, так что, MainFrameworkбезусловно , может быть разделена на MainFramework.Frameworkи MainFramework.Test, где NUnitзависимости существуют только в MainFramework.Test, и ClientLibraryиспользует только MainFramework.Framework. Спасибо за анализ.
