파일 또는 어셈블리의 Microsoft를 로드할 수 없습니다.테이블 저장소를 사용하는 Azure 클라우드 작업자 역할의 Data.ODATA 버전=5.2.0.0 오류
Azure Table Storage를 사용할 때 매우 특이한 문제가 있습니다.가 있습니다.모든 Azure 테이블 스토리지 기능을 다루는 Visual Studio 2012의 NET 4.5 프로젝트입니다.이 프로젝트/dll은 MVC 웹 사이트와 Azure 워커 역할의 두 가지 다른 프로젝트에서 참조됩니다(머신의 Azure 에뮬레이터에서 실행 중이지만 클라우드에 도입할 때도 마찬가지입니다).
레코드를 저장 또는 검색할 때 호출되는 다음 기능이 있습니다.
internal static CloudTable GetTable(CloudStorageAccount storageAccount, string tableReference)
{
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference(tableReference);
table.CreateIfNotExists();
return tableClient.GetTableReference(table.Name);
}
MVC 웹사이트에는 레코드를 Azure Storage 테이블에 저장하는 기능이 있으며, Azure Worker 역할에는 레코드를 읽어주는 서비스가 있습니다.
따라서 둘 다 저장 및 검색에 동일한 dll을 사용하지만 MVC 프로젝트는 레코드를 저장하는 데 문제가 없지만 Azure Worker 역할 서비스에서 레코드를 가져오려고 하면 "table"을 실행하려고 하면 예외가 발생합니다.CreateIfNotExists();."
Microsoft 파일 또는 어셈블리를 로드할 수 없습니다.Data.ODATA, 버전=5.2.0.0, Culture=중립, PublicKey토큰=31bf3856ad364e35' 또는 그 종속성 중 하나.찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다(HRESULT: 0x80131040의 예외).
다음 작업은 이미 완료했습니다.
- 모든 NuGet 패키지를 솔루션 레벨에서 최신 버전으로 업데이트.
- 오래된 dll 또는 이전 버전, 특히 시스템이 없는지 확인하기 위해 모든 프로젝트 참조를 검토했습니다.Spatial, Microsoft.WindowsAzure.구성, Microsoft.WindowsAzure.ServiceRuntime 및 Microsoft.ServiceBus, Microsoft.WindowsAzure.스토리지, Microsoft.Data.Edm 및 Microsoft.Data.ODATA
- 클라우드 서비스 및 WorkerRole 프로젝트를 처음부터 새로 생성하여 현재 WorkerRole 프로젝트에서 문제가 발생하지 않았는지 확인했습니다.
5.3 이후 특정 기능을 사용하는 다른 프로젝트에서 문제가 너무 많았기 때문에 dll을 5.2로 롤백하지 않았습니다.
현재 5.5에서 모든 dll을 실행하고 있습니다.
여기서 발견된 AsmSpy.exe 유틸리티를 실행하면 다음과 같은 출력으로 해석 방법을 100% 알 수 없습니다.
> Reference: Microsoft.Data.Edm
> 5.5.0.0 by Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client
> 5.5.0.0 by Microsoft.WindowsAzure.ActiveDirectory.GraphHelper.2013_04_05
> Reference: System.Spatial
> 5.5.0.0 by Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client Reference: Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client
> 5.2.0.0 by Microsoft.WindowsAzure.Storage <-- THIS SEEMS TO BE THE ONE THAT IS CAUSING ISSUES
제가 해석하는 것은 마이크로소프트입니다.WindowsAzure.스토리지 dll이 Microsoft의 V 5.2.0.0을 참조하고 있습니다.Data.ODATA dll입니다만, 문제가 있는 경우는 어떻게 수정합니까?스토리지 dll에서 본 설명서에 따르면 5.2가 아니라 5.4 이상을 참조하도록 되어 있습니다.
이렇게 쉽게 해결할 수 있는 문제를 창간하는 것은 도움이 되지 않습니다.
다음 추가 Configuration을 각각의 Configuration파일에 저장합니다(MVC의 경우 web.config, 워커의 경우 app.config).
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
:runtime
입니다.configuration
은 .는 이 을 사용하여 web.config에 대한 모든 를 재바인드하기 때문입니다MVC4는 이 섹션을 사용하여 모든 참조를 다시 바인드하기 때문입니다.System.Web.MVC
이치노
SDK가 모든 참조 라이브러리의 새로운 버전으로 업데이트 될 것이라고는 생각하지 않습니다.이건 미친 짓일 거야
비슷한 문제가 있었습니다만, 이 경우는 예외 메세지가 표시되었습니다.
Microsoft 파일 또는 어셈블리를 로드할 수 없습니다.Data.ODATA, 버전=5.5.0.0, Culture=중립, PublicKey토큰=31bf3856ad364e35' 또는 그 종속성 중 하나.찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다(HRESULT: 0x80131040의 예외).
ODATA 어셈블리의 v5.5.0.0을 로드하려고 했습니다.
ILSpy(http://www.ilspy.net)를 조사해 본 결과, Microsoft가 그 사실을 알게 되었습니다.WindowsAzure.Storage 2.0.0.0은 Microsoft를 탐색적으로 참조하고 있습니다.Data.ODATA 5.2.0.0 - 버전 5.5.0.0으로 없었습니다.
따라서 해결책은 NuGet 패키지 매니저를 사용하여 Microsoft를 제거하는 것이었습니다.WindowsAzure.스토리지, Microsoft 를 언인스톨 했습니다.Data.ODATA 5.5.다시 NuGet 패키지 매니저를 사용하여 Microsoft를 재설치합니다.WindowsAzure.Microsoft가 필요한 것을 확인한 스토리지.Data.ODATA 5.2 및 설치.
제대로 작동하는 솔루션으로 돌아갈 수 있습니다.
NuGet을 통해 패키지를 업데이트하거나 새 패키지를 추가하면 "파일 또는 어셈블리를 로드할 수 없습니다.「」의 문제.
패키지 매니저 콘솔(VS 2012 Tools/Library Package Manager/Package Manager Console)을 엽니다.Package Manager Console의 셸이 열리면 다음 명령을 실행합니다.
Add-Binding Redirect(바인딩 리다이렉트 추가)
참고: NugGet 예제에서는 예제 끝에 's'가 추가되므로 주의하십시오.Add-BindingRedirect
는 유효한 명령어가 아닙니다.
이것은, 다음의 처리를 실시합니다.
프로젝트의 출력 경로의 모든 어셈블리를 검사하고 필요에 따라 응용 프로그램 구성(app.config) 파일 또는 웹 구성(web.config) 파일에 바인딩 리디렉트를 추가합니다.
Package Manager Console의 전체 매뉴얼은 다음 URL에서 볼 수 있습니다.http://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference%20(v1.3)
Astaykov의 답변에서 볼 수 있는 두 가지 항목 외에 다음 항목이 내 프로젝트에 추가되었습니다.
<dependentAssembly>
<assemblyIdentity name="System.Spatial" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
저도 오늘 비슷한 문제가 있었어요.제가 발견한 유일한 차이점은 클라우드 앱이 Microsoft를 찾고 있다는 것입니다.Data.ODATA 버전=5.2.0.0
Visual Studio Object Browser를 사용하여 솔루션이 다음 위치에서 라이브러리를 사용한다는 것을 알게 되었습니다.
C:\Program Files(x86)\Microsoft WCF Data Services\5.0\bin\.네트워크
마이크로소프트(MS.거기에 있는 Data.ODATA 라이브러리는 5.0.0.0 버전이었기 때문에 5.2.0.0으로 덮어쓰면 문제가 해결되었습니다.
추신: WCF Data Services Tools for Windows Store Apps를 설치한 지 얼마 되지 않아 응용 프로그램이 다른 소스에서 가져올 수 있습니다.이 경우 다음 두 가지 옵션이 있습니다.
여기서 WCF Data Services Tools for Windows Store Apps를 설치하고 위의 솔루션을 사용합니다.
Visual Studio Object Browser를 사용하여 프로젝트에 현재 표시되는 ODATA 라이브러리의 버전과 저장된 위치를 찾을 수 있습니다.다음으로 부적절한 버전의 파일을 덮어쓸 필요가 있습니다.
저도 같은 문제가 있었습니다만, Azure를 사용하고 있지 않고, 5.2를 가리키는 하드 코드화된 레퍼런스는 없었습니다.그러나 (이 문서를 찾은 후) .svc의 텍스트가 올바른 어셈블리를 가리키고 있음을 확인함으로써 해결되었습니다.
<%@ ServiceHost Language="C#"
Factory="System.Data.Services.DataServiceHostFactory,
Microsoft.Data.Services, Version=5.6.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Service="MVC4WCFData 서비스FE5.NorthWindService" %>
이전에는 없었던 버전=5.6.0.0을 적어 둡니다.
언급URL : https://stackoverflow.com/questions/16908384/could-not-load-file-or-assembly-microsoft-data-odata-version-5-2-0-0-error-in-az
'source' 카테고리의 다른 글
프로그래밍 방식으로 번들 식별자 가져오기 (0) | 2023.04.22 |
---|---|
이진 연산자 '|'을(를) 두 개의 UIViewAutoresize 피연산자에 적용할 수 없습니다. (0) | 2023.04.22 |
셸에서 문자열을 분할하여 마지막 필드를 가져오는 방법 (0) | 2023.04.22 |
사후 백업 중 '개체의 현재 상태로 인해 작업이 유효하지 않습니다' 오류 (0) | 2023.04.22 |
여러 이벤트를 표시하는 타임라인 차트를 작성하려면 어떻게 해야 합니까?예: Wiki의 메탈리카 밴드 멤버 타임라인 (0) | 2023.04.22 |