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. 메모 NUnitNUnit3TestAdapter .dll에 추가 된 '들 TargetProject- 비록 TargetProject이미있다 NUnitNUnit3TestAdapter설치.

더 긴 개요

내부 용이라는라는 자체 NuGet 패키지를 만들었으며라는 ClientLibrary다른 프로젝트에 패키지 를 설치하려고합니다 TargetProject. 다음은 구조에 대한 간단한 분석입니다.

  • FullSolution.sln
    • MainFramework.csproj
    • ClientLibrary.csproj-> .nupkg이것으로부터 생성

별도 프로젝트 :

  • TargetProject.sln
    • TargetProject.csproj-> 설치 .nupkg이에

ClientLibrary에 대한 참조가 있으며의 MainFramework많은 메소드를 사용 MainFramework합니다.

설치시 ClientLibrary.1.0.0.nupkgTargetProject다음 .dll의가에 추가 얻고있다 TargetProject:

nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb

이 패키지를 삭제하면 패키지가 이미 설치되어 .dll있기 때문에 모든 것이 제대로 작동 TargetProject합니다. 그것들은 필요하지 않습니다. 설치 할 때 삭제 해야하는 것은 성가신 일입니다.

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

  1. .dll을 생성하기위한 빌드 ClientLibraryMainFramework프로젝트
  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내가 불평 하는 것들이 추가됩니다.

문제:

MainFrameworkNUnitNUnit3TestAdapterNuGet 패키지가 설치되어 있어야합니다. ClientLibrary 하지 않습니다. 따라서에 .dll설치 MainFramework되었지만 설치되지 않았기 때문에가 추가 된 것 같습니다 ClientLibrary. ( ClientLibrary참고 문헌을 기억하십시오 MainFramework.dll.)

있습니다 기타 에 모두 설치 패키지 MainFramework하고 ClientLibrary, 이들은이없는 .dll'에 추가됩니다의 TargetProject내가 문제를 가정하고하는 것은에서 패키지 선물을함으로써 발생하므로, 설치시를 MainFramework하지만 NOT IN ClientLibrary.

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

어떻게 설치할 수 있습니다 ClientLibraryTargetProject포함하지 않고 NUnitNUnit3TestAdapter .dll의를 설치하지 않고 NUnitNUnit3TestAdapterClientLibrary? 가능하다면 에 이미 설치된 및 패키지 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.FrameworkMainFramework.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.