Я розпочав з прочитання запропонованого питання, схожого на моє, але рішення не було: Чому 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.slnMainFramework.csprojClientLibrary.csproj->.nupkgпороджений від цього
Окремий проект:
TargetProject.slnTargetProject.csproj-> встановити.nupkgна це
ClientLibraryмає посилання на MainFrameworkта використовує багато методів з MainFramework.
Під час встановлення ClientLibrary.1.0.0.nupkgна додаються TargetProjectнаступні :.dllTargetProject
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. Дякую за аналіз
