2012-04-30 3 views
1

Приложение ASP.NET MVC 4 отлично работает на IIS и в среде IEExpress. К сожалению, у него, похоже, проблема с различными версиями EntityFramework. Все ссылки двойные и тройные, проверенные на наличие EF 4.1.0.0. Все сейчас не поддерживает EF 4.3.0.0. Где-то система, похоже, ссылается на 4.1.0.0 и пытается ее найти. Без успеха.Azure не удалось найти ссылку на EntityFramework

Всех похожие внешние ЛИЭС помечены как «копия локальная = истинная»

Microsoft.WindowsAzure.ServiceRuntime Critical: 201 : Role entrypoint could not be created: 
System.TypeLoadException: Unable to load the role entry point due to the following exceptions: 
-- System.IO.FileLoadException: Die Datei oder Assembly "EntityFramework, Version=4.1.0.0,  Culture=neutral, PublicKeyToken=b77a5c561934e089" oder eine Abhängigkeit davon wurde nicht gefunden.  Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) 
Dateiname: "EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 

=== Zustandsinformationen vor Bindung === 
LOG: Benutzer = COREI7\markus 
LOG: DisplayName = EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
(Fully-specified) 
LOG: Appbase = file:///D:/Dev/TFS/BettrFit/BettrFit.Azure/csx/Debug/roles/BettrFit/approot/bin 
LOG: Ursprünglicher PrivatePath = D:\Dev\TFS\BettrFit\BettrFit.Azure\csx\Debug\roles\BettrFit\approot\bin 
Aufruf von Assembly : System.Web.Http.Data.EntityFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. 
=== 
LOG: Diese Bindung startet im default-Load-Kontext. 
LOG: Es wurde keine Anwendungskonfigurationsdatei gefunden. 
LOG: Die Hostkonfigurationsdatei wird verwendet: 
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319 \config\machine.config wird verwendet. 
LOG: Verweis nach der Richtlinie: EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
LOG: Download von neuem URL file:///D:/Dev/TFS/BettrFit/BettrFit.Azure/csx/Debug/roles/BettrFit/approot/bin/EntityFramework.DLL. 
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: Nebenversion. 
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet. 

---> System.Reflection.ReflectionTypeLoadException: Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen. 
    bei System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) 
    bei System.Reflection.RuntimeModule.GetTypes() 
    bei System.Reflection.Assembly.GetTypes() 
    bei Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly) 
    --- Ende der internen Ausnahmestapelüberwachung --- 
    bei Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly) 
    bei Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CreateRoleEntryPoint(RoleType roleTypeEnum) 
    bei Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) 
Das Programm "[2372] WaIISHost.exe: Verwaltet (v4.0.30319)" wurde mit Code -1 (0xffffffff) beendet. 

Надеется, что вы, ребята, могли бы дать несколько советов о том, как решить эту проблему.

Я исследовал узел Data.EntityFramework:

Assembly a = System.Reflection.Assembly.Load("System.Web.Http.Data.EntityFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); 

foreach (AssemblyName i in a.GetReferencedAssemblies()) 
{ 
    Trace.TraceInformation("Ref Assemblies:" + i.Name+" "+i.Version); 
} 

Это показывает, что в зависимости от его EntityFramework 4.1.0.0 как по умолчанию. Как я могу это изменить? Web.Config, кажется, не используется во время загрузки - здесь я уже попробовал пересоединение.

+0

Вы также проверили наличие косвенных ссылок, которые могут быть локально установлены (в вашем глобальном кеше сборок) и отсутствуют в Azure? Посмотрите http://stackoverflow.com/a/10142356/468244 + комментарии. –

+0

Я проверил с GACViewer - пока не повезло. Я подозреваю, что System.Web.Http.Entityframework может вызвать проблему. Но я не знаю, как проверить, к какой версии относится ссылка lib. В журнале это называется Calling Assembly. Как я могу настроить его для использования «новой» версии при ее развертывании с пакетом? – Obiwan007

ответ

0

Пожалуйста, попробуйте использовать перенаправление сборки для перенаправления 4.1.0.0 на 4.3.0.0:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="4.0.0.0 - 4.2.0.0" newVersion="4.3.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

С наилучшими пожеланиями,

Мин Сю.

+0

Извините. мой web.config содержал такую ​​переадресацию. Попробовал тоже - не повезло. Кажется, что система игнорирует раздел времени выполнения web.config. – Obiwan007

2

Я установил его с помощью файла app.config с помощью моего проекта веб-роли. Кажется, что Azure Startup-Code использует файл App.Config вместо обычно используемого Web.Config.

Приложение app.config добавляет код переадресации runtime/assemplyreferences.

Смежные вопросы