NuGet 패키지를 설치할 때 이러한 .dll을 추가 할 수 있습니까?


10

내 것과 비슷한이 제안 된 질문을 읽음으로 시작했지만 해결 방법이 없었습니다. 왜 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 패키지를 복원 한 후 다음과 같이 문제를 재현 할 수 있습니다.

  1. client-library-repro-nuget-issue / ClientLibrary /에서 ClientLibrary.1.0.0.nupkg를 찾으십시오.

  2. target-project-repro-nuget-issue를위한 패키지 관리자 콘솔 열기 및 실행

Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
  1. 메모 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합니다. 그것들은 필요하지 않습니다. 설치 할 때 삭제 해야하는 것은 성가신 일입니다.

ClientLibraryNuGet 패키지를 추가하는 방법은 다음과 같습니다 TargetProject.

  1. .dll을 생성하기위한 빌드 ClientLibrary및 MainFramework프로젝트
  2. 디렉토리를 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>
  1. Run- 에 의존 nuget pack -IncludeReferencedProjects하기 때문에 (그리고에 의해 사용되는 다른 여러 패키지들 )ClientLibraryMainFrameworkMainFramework

  2. 로 이동하여 TargetProject패키지 관리자 콘솔을 엽니 다.

  3. 운영 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하지만 NOT IN ClientLibrary.

나는 설치하여 내가 할 수있는 "수정"이 문제를 생각 NUnit하고 NUnit3TestAdapter에 ClientLibrary,하지만 ClientLibrary불필요한 것 때문에 실제로 전혀 패키지를 사용하지 않습니다.

어떻게 설치할 수 있습니다 ClientLibrary에 TargetProject포함하지 않고 NUnit와 NUnit3TestAdapter .dll의를 설치하지 않고 NUnit및 NUnit3TestAdapter에 ClientLibrary? 가능하다면 에 이미 설치된 및 패키지 ClientLibrary.1.0.0.nupkg를 사용하고 싶습니다 .NUnitNUnit3TestAdapterTargetProject

대답이 "불가능"하다면 괜찮지 만 설명을 원합니다.이 질문의 전반적인 목표는 NuGet과 종속성의 작동 방식을 더 잘 이해하고 이것이 왜 문제가되었는지 이해하는 것입니다. 처음. 읽어 주셔서 감사합니다.


1
동작을 설명하기 위해 샘플 프로젝트를 제공해야합니다.
— Lex Li

@LexLi 재현 단계와 함께 동작을 설명하는 두 개의 샘플 리포지토리로 프로젝트 설명을 업데이트했습니다.
— Christine

3
이 코드는 MainFramework.csproj에서 NUnit 종속성을 갖는 나쁜 접근 방식을 보여줍니다. MainFramework.UnitTest.csproj와 같은 별도의 단위 테스트 프로젝트로 옮길 수 있습니까?
— Lex Li

그 의미가 있습니다 - ClientLibrary단지의 일부를 사용 MainFramework하므로, MainFramework로 확실하게 할 수있다 분할 MainFramework.Framework과 MainFramework.Test의 경우 NUnit의존성은 존재 MainFramework.Test하고, ClientLibrary단지 활용 MainFramework.Framework. 분석해 주셔서 감사합니다.
— Christine

답변:


7

일반적으로 모든 테스트 및 해당 NuGet 패키지를 자체 프로젝트에 유지하는 것이 가장 좋습니다. 그런 다음 테스트 프로젝트를 참조하는 프로젝트가 없는지 확인하십시오.

여기에 이미지 설명을 입력하십시오

온 하지 그들은이 프로젝트가 클라이언트 라이브러리 참조에 추가 되었기 때문에 측면, 클라이언트 라이브러리는 NUnit과 DLL을 포함 할 것이다.

온 반면 DO의 측면, 클라이언트 라이브러리는 NUnit과는 어느 참조 때문에 테스트 프로젝트를 DLL을 포함하지 않습니다.


2
분석 및 설명 주셔서 감사합니다. 본인과 다른 사용자가 제안한 것처럼 프로젝트를 분할하여이 방법을 구현했습니다. 이것은 이전에했던 것보다 훨씬 더 나은 연습처럼 느껴지며 내 문제도 해결되었습니다.
— Christine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.