Я розпочав з прочитання запропонованого питання, схожого на моє, але рішення не було: Чому 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 /
Відкрийте консоль менеджера пакунків для цільового проекту-репро-нуга-випуску та запуску
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Зверніть увагу на
NUnit
іNUnit3TestAdapter
.dll
«S, які додаються вTargetProject
- навіть якщоTargetProject
вжеNUnit
іNUnit3TestAdapter
встановлена.
Більш довгий огляд
Я створив власний пакет NuGet для внутрішнього використання, який називається ClientLibrary
, і я намагаюся встановити його на інший проект, званий TargetProject
. Ось швидка розбивка структури:
FullSolution.sln
MainFramework.csproj
ClientLibrary.csproj
->.nupkg
породжений від цього
Окремий проект:
TargetProject.sln
TargetProject.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
проектуйте для створення своїх .dlls - Змініть каталог у
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
і NUnit3TestAdapter
встановлені пакети NuGet. 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
. Дякую за аналіз