다음을 통해 공유


'dotnet publish'는 릴리스 구성을 사용함

대상 프레임워크가 .NET 8 이상 버전인 경우, 이 명령dotnet publish은 기본적으로 Release 구성을 사용하는 대신 Debug 구성을 사용합니다.

이전 동작

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

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

새 동작

.NET 8 SDK 또는 이후 버전으로 개발하는 경우, dotnet publish 이상 버전으로 설정된 프로젝트는 기본적으로 Release 구성을 TargetFramework 사용합니다. 출력 경로로 하드 코딩 Debug 한 CI/CD 스크립트, 테스트 또는 코드가 있는 경우 이 변경으로 워크플로가 중단될 수 있습니다.

프로젝트가 여러 버전용으로 설정된 경우, 새 동작은 게시할 때 dotnet publish -f net8.0을 사용하여 .NET 8 이상의 대상 프레임워크를 지정할 때에만 적용됩니다.

솔루션 내의 프로젝트:

  • dotnet publish 는 솔루션 파일이 지정된 경우 Visual Studio 솔루션의 모든 프로젝트를 게시할 수 있습니다. .NET 8 이상을 대상으로 하는 솔루션 프로젝트의 경우, 값 PublishRelease 이 정의되지 않았을 때에 true 으로 암시적으로 설정됩니다. 그러나 솔루션에 dotnet publish 사용할 올바른 구성을 결정하려면 솔루션의 모든 프로젝트가 해당 값 PublishRelease에 동의해야 합니다. 솔루션에서 PublishRelease 속성이 false로 설정된 이전 프로젝트가 있는 경우, 새로운 .NET 8+ 프로젝트에서도 속성을 명시적으로 false로 설정해야 합니다.

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

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

도입된 버전

.NET 8 미리 보기 1

파괴적 변경 유형

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

변경 이유

게시할 때 대부분의 경우 코드를 최적화하고 디버깅 정보를 제외하여 앱을 더 작게 유지할 수 있습니다. 고객들은 오랫동안 Release의 기본 구성으로 publish을 요청해 왔습니다. 또한 Visual Studio는 수년 동안 이 동작을 수행해 왔습니다.

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

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

  • 게시를 위한 Debug 구성을 명시적으로 지정하려면 -c와 함께 --configuration 또는 dotnet publish 옵션을 사용합니다.

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

  • 솔루션이 문제가 있는 경우, PublishRelease을(를) 명시적으로 true으로 설정하거나 false를 원래 동작으로 되돌릴 수 있습니다.

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    또는 Directory.Build.Props 파일에서 속성을 지정할 수 있습니다. 그러나 false을 이 파일에서 설정하더라도, 솔루션의 .NET 8+ 프로젝트에서 속성을 false으로 명시적으로 설정해야 합니다. 마찬가지로 일부 프로젝트에서 Directory.Build.Props 파일의 값과 다른 값을 명시적으로 설정하면 게시가 실패합니다.

  • 솔루션을 게시했는데 성능이 저하된 경우에는 DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS 환경 변수를 true (또는 다른 값)으로 설정하여 성능 저하를 해결할 수 있습니다. 그러나 이 변수를 설정하고 솔루션에 .NET 8+ 프로젝트와 .NET 7 이하를 대상으로 하는 프로젝트가 포함된 경우 모든 프로젝트가 정의 PublishRelease될 때까지 게시가 실패합니다. 이 변수는 둘 다 dotnet publish 에 영향을 줍니다 dotnet pack.

참고하십시오