2013-04-17 4 views
8

У меня есть проект фреймворка сущности, который отлично работает на моей машине, но падает при запуске из сети. Последние изменения в проекте включают добавление DLL Dynamic Linq (System.Linq.Dynamic)Исключение инициализатора типа Entity Framework

Когда я отладить его от сети, сообщает VS: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

Внутреннее исключение: «Не удалось загрузить файл или сборку «EntityFramework, Version = 4.4.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089» или одна из его зависимостей. Определение манифеста расположенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) »:« EntityFramework, Version = 4.4 .0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 "}

Я пробовал обычные трюки: удаляя каталог packages с roo t проекта, удаление и переустановка с консоли диспетчера пакетов, но безрезультатно.

Мой app.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="LGFinance.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    </configSections> 
    <connectionStrings> 
    <add name="LGFinanceEntities" connectionString="metadata=res://*/Model.LGFinanceContext.csdl|res://*/Model.LGFinanceContext.ssdl|res://*/Model.LGFinanceContext.msl;provider=System.Data.SqlClient; provider connection string='data source=lightning;initial catalog=DLGDB;Integrated Security=true;Password=******;multipleactiveresultsets=True;App=EntityFramework'" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <applicationSettings> 
    <LGFinance.Properties.Settings> 
     <setting name="Setting" serializeAs="String"> 
     <value /> 
     </setting> 
    </LGFinance.Properties.Settings> 
    </applicationSettings> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Может кто-то указать на то, что я сделал не так?

+0

Когда вы говорите «но падает при запуске из сети», вы имеете в виду, что код работает на другой машине. Скорее всего, везде, где вы используете код, не существует dll framework 5.0 dll.Проверьте корзину на «удаленной машине» и посмотрите, есть ли она. – cgotberg

+0

Да, другой машине. Но у меня есть все DLL (и несколько связанных xmls), расположенных в этом каталоге. Все работает до сегодняшнего дня, и единственным реальным новым материалом, на котором я могу обвинить его, является динамический linq – mcalex

ответ

20

В вашем файле App.config указан список Entity Framework 5.0, а некоторые проекты в вашем коде все еще хранятся на EF 4.4 и ожидают найти его в файле App.config.

Вот что, скорее всего, произошло: вы установили EF 5.0 в проект, который был создан в .NET 4.0, что делает версию EF 4.4 вместо 5.0 (начиная с 5.0 только для .NET 4.5). Если вы попытаетесь выполнить проект до .NET 4.5 позже, у вас все равно будет EF 4.4 для этого проекта. Это потребует повторной установки EF в этом проекте, чтобы иметь правильную ссылку на EF 5.0.

Сделайте снимок и сообщите мне, если он работает.

+0

Не совсем уверен, что я делаю, но я попытался удалить и повторно установить EF с помощью Nuget. Удаление, похоже, сработало, но при повторной установке Nuget сказал, что проект уже имел ссылку на EF 5, но не позволит мне удалить аги. Ответ SO сказал, чтобы попробовать с командной строкой nuget для установки, поэтому я сделал это, и он дал успешную установку msg, но затем последовал за этим тем же: у Project уже есть сообщение типа ссылки EF. – mcalex

+0

Вам нужно будет вручную удалить Entity Framework из ссылок в проекте, а затем переустановить EF. – IronMan84

+0

Да, это было - или что-то в этом роде - я все еще не уверен. Наконец, все это вытащили и снова вернули (я думаю). Теперь ребятам систем необходимо развернуть dot net 4.5. К сожалению. :-) – mcalex

10

Все проект должен иметь правильную версию EF установлена ​​первой, а затем проверьте следующее в файле App.config,

  1. Убедитесь ConnectionStrings элемента находится после configSections элементов.
  2. Удостоверьтесь, что пуск элемент после connectionStrings элемент.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 
    <connectionStrings> 
     <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup>  
</configuration> 
4

Я попытался все, после этого просто удалили g, это сработало для меня

<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 
+1

Я начал свой проект с EF6, но требовал откат к EF5. Раздел «провайдеры» недоступен в EF5, поэтому удаление этой исправленной проблемы. Спасибо. – MarceloBarbosa

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