programing

파일이나 어셈블리 'mssshrtmi' 또는 해당 종속성 중 하나(Azure Table Storage Access)를 로드할 수 없습니다.

abcjava 2023. 4. 26. 22:51
반응형

파일이나 어셈블리 'mssshrtmi' 또는 해당 종속성 중 하나(Azure Table Storage Access)를 로드할 수 없습니다.

데이터 센터의 웹 사이트와 Azure 플랫폼에서 실행되는 웹 사이트 간의 트래픽을 리디렉션하는 데 사용하는 HTTP 모듈이 있습니다.이 HTTP 모듈은 Azure Table Storage에서 리디렉션 규칙을 검색합니다.

리디렉션은 Azure에서 실행될 때뿐만 아니라 내 로컬 개발 시스템에서도 잘 작동합니다.그러나 모듈을 데이터 센터 서버(IIS 7, WS 2008 R2 Standard 64bit, )에 배포하는 경우NET 4.0, ASP.NET 4.0 ) 다음 오류가 발생함

Parser Error Message: Could not load file or assembly 'msshrtmi' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Line 124:                <add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Line 125:                <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
Line 126:                <add assembly="*" />
Line 127:            </assemblies>
Line 128:            <buildProviders>

Source File: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config    Line: 126 

"hthrtmi.dll"은 실제로 내 배포 bin 디렉토리에 있습니다.

이 DLL을 제거하면 데이터 센터 사이트는 정상적으로 작동하지만 HTTP 모듈이 테이블 저장소에서 구성 데이터를 로드하지 못하고 대신 다음 오류가 발생합니다.

---> System.TypeInitializationException: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()
   --- End of inner exception stack trace ---
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable()

또한 "Microsoft"를 수동으로 포함했습니다.Windows Azure.ServiceRuntime.dll"은 데이터 센터 서버에서 사용할 수 있도록 하기 위한 배포의 일부입니다.

Azure 프로젝트는 그 특정 파일에 매우 민감한 것 같습니다.보낸 사람: http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/0fac1f05-eb55-432f-80ac-6f15cde5b14b/

웹 역할 프로젝트를 다시 빌드할 때 bin 폴더에 msshrtmi.dll 파일이 있는지 확인해 주시겠습니까?그렇다면 Dependency Walker를 사용하여 64bit인지 32bit인지 확인하시기 바랍니다.32비트인 경우 다음 옵션 중 하나를 사용하여 이 dll 파일을 bin 폴더로 출력하지 않도록 하십시오.

  1. 웹 역할 프로젝트의 대상을 x64로 지정하고 azure 서비스 프로젝트를 다시 만듭니다.이 옵션은 다음 사용자에 의해 확인되었습니다. http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/286cecf6-1423-4ef3-93f9-0eb8a67d8192 (편집: 2012년 2월 현재 데드 링크)

  2. 메모장을 사용하여 웹 사이트 프로젝트 파일을 열고 모든 구성 속성 그룹에서 PlatformTarget 요소를 제거합니다.이 옵션은 http://tomkrueger.wordpress.com/2010/07/27/azure-deployment-issue-after-upgrading-to-visual-studio-2010-and-net-4-0/ 에서 인용한 것입니다.

  3. 빌드 작업이 성공적으로 수행될 때 msshrtmi.dll을 삭제하려면 빌드 후 이벤트 명령을 작성합니다.이렇게 하려면 웹 역할 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택하십시오.빌드 이벤트 탭을 선택하고 "빌드 후 이벤트 명령줄" 텍스트 상자에 다음 명령을 입력합니다.

cd $(TargetDir) del msshrtmi.dll

이 모든 것은 대상 환경에 배포하기에 적합한 구성이 구축되었는지 확인해야 한다는 것을 의미합니다.데이터 센터 서버에 배포할 대상이 x64인지 확인합니다.

이것으로 저는 문제를 해결했습니다.VS2013용 개발자 명령 프롬프트에서 이 명령을 실행합니다.

gacutil /i "C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.0\bin\runtimes\base\x64\msshrtmi.dll"
gacutil /i "C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.0\bin\runtimes\base\x86\msshrtmi.dll"

이렇게 하면 글로벌 어셈블리 캐시에 런타임 파일이 모두 등록됩니다.NET 응용 프로그램이 액세스할 수 있습니다.

저는 같은 문제를 안고 있었기 때문에 이 게시물을 보게 되었습니다. 불행히도 위의 단계 중 어떤 것도 저에게 효과가 없었습니다.

머리를 긁적이고 어수선한 후에 저는 해결책을 찾았는데, 그것은 놀라울 정도로 간단했습니다.

는 여기에 블로그를 했습니다.

  • Azure 프로젝트(파란색 지구본이 있는 프로젝트)를 마우스 오른쪽 버튼으로 클릭합니다.
  • 응용프로그램 탭을 누릅니다.
  • 최신 SDK가 설치되어 있음을 알려주는 버튼이 있습니다.클릭!

따라서 몇 가지 파일이 약간 변경되어 모든 차이가 발생하는 것은 다음과 같습니다.

  • .csdef 파일 - 'schemaVersion업데이트되었습니다.
  • .ccproj - 'ProductVersiondiscovery'CloudExtensionsDir업데이트되었습니다.
  • .csproj - You are Azure SDK 참조가 업데이트됩니다(서비스 런타임, 진단 등).

생각에 ' 생각에살그는자인제그▁'▁the▁'▁was제는▁i▁killer'인 것 .CloudExtensionsDir저의 경우, 이것은 다음과 같이 바뀌었습니다.

<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">
  $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\1.7\
</CloudExtensionsDir>

받는 사람:

<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">
  $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\1.8\
</CloudExtensionsDir>

애저에 배치되어 바로 작업했습니다.

이것이 도움이 되길 바랍니다!

PS: 덧붙여야 할 것은, 이전 SDK나 그 어떤 것도 제거하거나 '플랫폼 대상'을 만지작거릴 필요가 없었다는 것입니다.이걸 바꾼 것만으로도 잘 작동했습니다.

저는 이 문제를 오랫동안 다루다가 우연히 알게 되었습니다.도움이 됐어요.

http://mictorino.wordpress.com/2011/09/20/vs2010-build-configurations-and-msshrtmi-dll-x86

이 문제는 지난 이틀 동안 저를 괴롭혔고, 여기와 다른 웹사이트에서 언급된 모든 해결책이 작동하지 않았습니다.

이제 드디어 작동하게 되었습니다.문제는 제 컴퓨터에 설치된 SDK와 도구 버전의 일부 잘못된 조합이었습니다.며칠 전에 다음을 다운로드했습니다.

  • Windows Azure 도구 1.7
  • Visual Studio 2012용 Windows Azure SDK 미리 보기(2012년 6월)

Azure SDK가 미리 보기라는 것을 알고 있었지만 일부 릴리스 정보에 따르면 Visual Studio 2010용 (안정적) SDK의 현재 버전이 포함되어 있다고 생각했습니다.

하고 설치한 Windows Azure SDK for .NET (VS 2010 SP1) - June 2012모든 것이 완벽하게 작동했습니다.

저는 단순히 참조를 추가하여 우리가 겪고 있는 문제를 해결했습니다.

C:\Program Files\Microsoft SDKs\Windows Azure.NET SDK\2012-06\bin\runtimes\base\x86\msshrtmi.dll

모든 시나리오에서 작동하지는 않겠지만 시도해 볼 가치가 있습니다.

projet에 "_bin_deployableAssemblys" 폴더를 추가하기만 하면 됩니다.파일 "C:\Program Files\Microsoft SDKs\Windows Azure.이 폴더에 NET SDK\2012-06\bin\runtimes\base\x64\msshrtmi.dll"이 있습니다.빌드 작업을 "없음"으로 변경하고 배포...

내가 할 일은...

제가 미쳤을 수도 있지만, Windows Azure SDK가 설치되지도 않았기 때문에 이런 일이 발생했습니다.멍청하긴 하지만 특정 상황에서 감시하는 데 유용합니다.

저는 최근에 이런 일을 겪었고 적어도 제 경우에는 이 오류가 Microsoft에 대한 참조로 인해 발생했다고 판단했습니다.Windows Azure.현재 SDK 버전보다 오래된 서비스 런타임입니다.

저의 경우 SDK 2.2로 업그레이드한 지 얼마 되지 않았지만 서비스 런타임 참조는 여전히 2.1이었고, 이러한 참조를 2.2로 업데이트하여 msshrtmi.dll을 참조할 필요 없이 문제를 해결했습니다.

로컬 복사 속성을 "거짓"으로 변경했습니다.그리고 그것은 저에게 효과가 있었습니다.

단계:

  1. 참조로 이동합니다.
  2. 참조에서 dll 속성을 엽니다.
  3. 로컬 복사 속성을 거짓으로 변경합니다.

Windows Azure와 물리적 하드웨어 모두에 배포할 수 있는 솔루션을 사용할 때도 비슷한 오류가 발생했습니다.물리적 하드웨어에서 솔루션을 실행하려고 하면 오류가 표시됩니다.문제는 Azure 라이브러리가 사내 빌드에 필요하지 않았음에도 불구하고 솔루션의 일부라는 사실에서 비롯되었습니다.

간단한 솔루션은 물리적 하드웨어에 윈도우즈 Azure SDK를 설치하는 것입니다.이렇게 하면 누락된 라이브러리가 GAC에 설치됩니다.

이 솔루션은 다음과 같은 이점이 있습니다.

  • 메모장으로 프로젝트 열기
  • 모든 "PropertyGroup" 아래의 모든 "PlatformTarget" 태그 삭제

이 문제에 대한 저의 해결책은 msshrtmi.dll(x86과 x64 모두)을 앱과 함께 배송한 다음 필요할 때 동적으로 로드하는 것이었습니다.

http://jake.ginnivan.net/azure-and-msshrtmi 을 참조하십시오.

GAC에 msshrtmi를 추가하여 문제를 해결했습니다.

X64 버전을 참조하고 있는지 확인함으로써 이 문제를 해결할 수 있었습니다.msshrtmi.dllGAC에서[1](프로젝트에 설정된 x64 플랫폼 목표와 일치).

[1]c:\Windows\assembly\GAC_64\msshrtmi\1.7.0.0__31bf3856ad364e35>

저도 같은 문제를 겪고 있었습니다.

솔루션 폴더/하위 폴더에서 "mssshrtmi.dll" 파일을 모두 삭제한 다음 다시 빌드합니다.

언급URL : https://stackoverflow.com/questions/8273321/could-not-load-file-or-assembly-msshrtmi-or-one-of-its-dependencies-azure-tab

반응형