내 것과 비슷한이 제안 된 질문을 읽음으로 시작했지만 해결 방법이 없었습니다. 왜 MSTest.TestAdapter가 DLL을 NuGet 패키지에 추가합니까?
빠른 문제 설명
나는 NuGet 패키지를 작성하고, 때마다 나는 그것을 설치 NUnit
하고 NUnit3TestAdapter
.dll
의는 I가 설치 프로젝트에 추가됩니다. 이 문제를 해결하는 솔루션을 찾고 싶습니다.
재현 단계
설명하고있는 문제를 재현하는 두 개의 자식 저장소를 푸시했습니다.
ClientLibrary
/ MainFramework
(내가 NuGet 패키지 생성되는 프로젝트) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject
(패키지가 설치된 프로젝트) -https : //github.com/harbourc/target-project-repro-nuget-issue
두 저장소를 복제하고 NuGet 패키지를 복원 한 후 다음과 같이 문제를 재현 할 수 있습니다.
client-library-repro-nuget-issue / ClientLibrary /에서 ClientLibrary.1.0.0.nupkg를 찾으십시오.
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.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
.
- .dll을 생성하기위한 빌드
ClientLibrary
및MainFramework
프로젝트 - 디렉토리를
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>
Run- 에 의존
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
하지만 NOT IN 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
. 분석해 주셔서 감사합니다.