다음을 통해 공유


'dotnet pack'은 릴리스 구성을 사용함

dotnet pack 코드를 NuGet 패키지로 압축하는 명령은 이제 Release 구성을 기본적으로 사용하며, Debug 구성 대신 사용합니다.

이전 동작

dotnet pack은(는) 이전에는 Debug 구성을 사용했지만, 명시적으로 구성이 지정되어 있거나 PackReleasetrue로 설정된 경우는 예외였습니다.

속성PackRelease은 호환성을 손상시킬 수 있는 변경 사항에 대한 해결책으로 .NET 7에 추가되었습니다. 이전에는 Visual Studio 솔루션의 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS 일부인 프로젝트에서 사용할 PackRelease 환경 변수를 설정할 수 있었습니다.

새 동작

.NET 8 SDK 이상 버전을 dotnet pack 사용하여 개발하는 경우 Release 프로젝트에 구성을 사용합니다. 출력 경로로 하드 코딩 Debug 한 CI/CD 스크립트, 테스트 또는 코드가 있는 경우 이 변경으로 워크플로가 중단될 수 있습니다. 또한 구성이 명시적으로 지정되지 않은 경우 Debug (예: 사용 dotnet pack --configuration Debug) 압축된 앱을 디버그할 수 없습니다.

dotnet pack 는 여러 TFM(대상 프레임워크 모니커)에 대해 동시에 압축할 수 있습니다. 프로젝트가 여러 버전을 대상으로 하며, 다른 대상에 대해 PackRelease 값이 다른 경우, 일부 TFM은 Release 구성을 패키징하고, 다른 TFM은 Debug 구성을 패키징하는 충돌이 발생할 수 있습니다.

솔루션 내의 프로젝트:

  • dotnet pack 는 솔루션 파일이 지정된 경우 Visual Studio 솔루션의 모든 프로젝트를 압축할 수 있습니다. 솔루션의 각 프로젝트에 대해 PackRelease의 값이 정의되지 않은 경우, true으로 암시적으로 설정됩니다. 사용할 올바른 구성을 결정하려면 dotnet pack 솔루션의 모든 프로젝트가 해당 값 PackRelease에 동의해야 합니다.

  • 이러한 변경으로 인해 특히 많은 프로젝트가 포함된 솔루션의 dotnet pack 경우 회귀 성능이 저하될 수 있습니다. 이 문제를 해결하기 위해 새 환경 변수 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS 가 도입되었습니다.

  • DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS 환경 변수가 더 이상 인식되지 않습니다.

도입된 버전

.NET 8 미리 보기 1

파괴적 변경 유형

이 변경 내용은 원본 호환성에 영향을 줄 수 있으며 동작 변경이기도 합니다.

변경 이유

패키지를 만들 때 대부분의 경우 코드를 최적화하고 디버깅 정보를 제외하여 패키지를 더 작게 유지할 수 있습니다.

환경 변수는 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS 사용하도록 설정한 동작이 이제 기본 동작이며 세분화된 컨트롤이 더 이상 필요하지 않으므로 제거되었습니다.

  • 새 동작을 완전히 사용하지 않도록 설정하려면 환경 변수 DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASEtrue (또는 다른 값)로 설정할 수 있습니다. 이 변수는 둘 다 dotnet publish 에 영향을 줍니다 dotnet pack.

  • 압축에 대한 구성을 명시적으로 지정하려면 Debug과 함께 -c 또는 --configuration 옵션을 사용하십시오 dotnet pack.

  • 하드 코드된 출력 경로로 인해 CI/CD 파이프라인이 중단된 경우 대신 경로를 ReleaseDebug업데이트하거나, 환경 변수를 사용하여 DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE 새 동작을 사용하지 않도록 설정하거나, 구성을 Debug 사용하도록 지정합니다.

  • 솔루션을 패키징할 때, 하나 이상의 프로젝트가 명시적으로 PackRelease 값을 설정하여 솔루션이 제대로 작동하지 않는 경우 각 프로젝트에서 명시적으로 PackReleasefalse로 설정해야 합니다.

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • 솔루션을 패키징하고 성능이 저하된 경우, 환경 변수 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONStrue (또는 다른 값)로 설정하여 성능 회귀를 제거할 수 있습니다. 이 변수를 사용하고 있는 경우, 프로젝트가 PackRelease을 정의하면 모든 프로젝트가 해당 변수를 정의해야 하며, 그렇지 않으면 Directory.Build.Props 파일을 사용할 수 있습니다. 이 변수는 둘 다 dotnet publish 에 영향을 줍니다 dotnet pack.

참고하십시오