code

Azure 앱 서비스를 64비트로 변경하는 방법

starcafe 2023. 5. 3. 21:35
반응형

Azure 앱 서비스를 64비트로 변경하는 방법

64비트 ASP에 요청하는 데 문제가 있었습니다.Azure App 서비스에서 실행 중인 NET Core API.반환되는 오류는 다음과 같습니다.

처리되지 않은 예외:시스템.잘못된 이미지 형식 예외:파일 또는 어셈블리 '***.dll'을(를) 로드할 수 없습니다.잘못된 형식의 프로그램을 로드하려고 했습니다.

저는 이것이 앱의 플랫폼(64비트)과 앱이 실행되는 환경의 플랫폼 사이에 불일치가 있다는 것을 의미한다는 것을 이해합니다.앱 서비스가 64비트로 실행되도록 변경하는 방법을 알 수 없습니다.

Azure 포털의 Application Settings에서 Platform을 64비트로 설정했습니다.

여기에 이미지 설명 입력

그러나 Kudu에 체크인하면 런타임 환경이 win8-x86에서 작동 중임을 나타냅니다.

여기에 이미지 설명 입력

project.json

"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "platform": "x64"
},

"runtimes": {
    "win10-x64": {}
}

몇 가지 질문

  1. 앱 서비스가 64비트 플랫폼에서 실행되도록 변경하려면 어떻게 해야 합니까?
  2. RID가 중요한가요?win8...내 런타임 구성이 다음과 같을 때project.json지정합니다.win10...아마도 x86과 x64가 중요하지만, win8과 win10도 같은 버전의 윈도우여야 합니까?

이제 Azure App Service에서 사용할 수 있습니다.

배포 단계:

  1. 포털에서 플랫폼을 64비트로 설정
  2. csproj에 다음을 포함하여 프로젝트 대상이 64비트인지 확인합니다.
<PropertyGroup>
  <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
  1. 응용 프로그램을 게시할 때 대상 프레임워크가 win-x64로 설정되어 있는지 확인합니다. (실행 중인 경우)dotnet publish그냥 추가-r win-x64)

설명서는 여기에 있지만 (현재) 약간 희박한 것으로 인정됩니다.

Github 문제 대응은 프레임워크에 의존하는 배포를 수행하고 "그냥 작동"할 수 있어야 한다는 것을 시사합니다.YMMV 하지만 그것은 내 자신의 경험이 아니었기 때문에 위의 런타임 플래그 제안.

TLDR; 64비트.를 사용하는 NET 핵심 프로세스.NET 코어 런타임(와 반대).NET Framework 런타임)은 아직 Azure에서 지원되지 않지만 향후 출시될 예정입니다.


다음은 Microsoft Azure 지원팀과 논의한 내용입니다.

Azure 포털의 64비트/32비트 구성(위의 스크린샷에 표시됨)은 IIS w3wp.exe 프로세스를 제어합니다.w3wp.exe 프로세스는 요청을 NET 코어 프로세스로 전달합니다.이 구성은 의 비트를 제어하지 않습니다.NET 코어 프로세스.조금 헷갈리긴 하지만 위 스크린샷에서 플랫폼 옵션을 변경해도 아무런 영향이 없었던 이유를 설명합니다.

앱 서비스 닷넷의 PATH 환경변수 설정을 기반으로 합니다.exe는 32비트 "D: \Program Files (x86)\dotnet\dotnet.exe"에 매핑됩니다.의 64비트 런타임.NET core는 앱 서비스에 사전 설치되어 있지 않아 현재 사용할 수 없습니다.

Microsoft는 에 64비트 지원을 추가할 계획입니다.에서 실행되는 NET 코어 애플리케이션Azure의 NET 코어 런타임이지만 의 향후 업데이트에 따라 다릅니다.NET 핵심 툴 체인.그들은 나에게 내부 날짜를 알려주었지만 나는 그것을 공개적으로 공유하지 않겠다고 약속했습니다.

그들이 제게 준 해결책은 ASP를 사용하는 것이었습니다.ASP가 아닌 NET 코어(.net 프레임워크 사용) 비주얼 스튜디오 템플릿.NET 코어(.net 코어 사용) 1개.그것은 64비트를 로딩합니다.ASP의 Netframework 런타임입니다.넷코어 웹 애플리케이션.이를 위해서는 약간의 마이그레이션 작업이 필요하며 일부 프로젝트에서는 불가능할 수도 있습니다.

다행히 32비트 버전의 종속성으로 전환할 수 있었습니다. 이는 앱이 Azure 환경에서 작동한다는 것을 의미합니다.슬프게도 이것은 이 선택권이 없는 사람들에게는 큰 의미가 없을 것이고, 저는 많은 사람들이 있다고 확신합니다.

64비트 런타임이 필요한 경우 4가지 방법이 있습니다.

  1. 자체 포함 애플리케이션 배포
  2. 고유한 런타임 배포
  3. Linux Azure 앱 서비스 사용
  4. 컨테이너용 웹 앱 사용

자세한 방법은 아래 링크를 참조하십시오. https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service/

크레딧: 글렌 콘드론

dotnet publish 명령은 IIS에서 dotnet 프로세스를 시작하는 데 사용하는 web.config 파일을 생성합니다.Kudu의 PATH 환경 변수 닷넷.exe는 D:\Program Files(x86)\dotnet

솔루션은 빌드 후 이 파일에서 교체하는 것입니다.

<aspNetCore processPath="dotnet" arguments=...

포함:

<aspNetCore processPath="%ProgramFiles%\dotnet\dotnet" arguments=...

언급URL : https://stackoverflow.com/questions/42726350/how-to-change-azure-app-service-to-64-bit

반응형