2012-02-26 11 views
25

Tengo un proyecto "MVC 4" y quiero agregar un ensamblaje al archivo web.config, pero no sé dónde debería colocarlo. Intento cualquier forma, pero no puedo encontrar la solución.Cómo agregar el ensamblado en el archivo web.config de mvc 4

cada vez que tengo este error:

You must add a reference to assembly 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

este es mi archivo web.config:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <connectionStrings> 
    <add name="ParsGraphicEntities" connectionString="metadata=res://*/Entities.ParsGraphic.csdl|res://*/Entities.ParsGraphic.ssdl|res://*/Entities.ParsGraphic.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=ParsGraphic;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-UI.MVC.InternetApplication-2;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="true" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    <profile defaultProvider="DefaultProfileProvider"> 
     <providers> 
     <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
     </providers> 
    </profile> 
    <membership defaultProvider="DefaultMembershipProvider"> 
     <providers> 
     <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
     </providers> 
    </membership> 
    <roleManager defaultProvider="DefaultRoleProvider"> 
     <providers> 
     <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
     </providers> 
    </roleManager> 
    <sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
     <providers> 
     <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
     </providers> 
    </sessionState> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

por favor me ayude.

gracias.

+3

¿Por qué crees que tienes que agregar una referencia en la web.config? ¿Compila en tiempo de diseño? Si no, sugeriría agregar una referencia usando el cuadro de diálogo Agregar referencia. O mejor, use nuget e instale el marco de entidad – rfcdejong

+1

¿Ha echado un vistazo a http://stackoverflow.com/questions/5021248/could-not-load-file-or-assembly-system-data-entity – RickAndMSFT

+0

@rfcdejong, ya agrego System.Data.Entity con el cuadro de diálogo Agregar referencia, pero debo agregar este ensamblado en web.config –

Respuesta

40

Es bastante simple. Vistazo a su sección de compilación en su web.config:

<compilation debug="true" targetFramework="4.0"/> 

Ahora abre la sección y poner su montaje en el interior de esta manera:

<compilation debug="true" targetFramework="4.0"> 
    <assemblies> 
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </assemblies> 
</compilation> 

Bibliotecas en esta sección se comprueban en tiempo de compilación, no tiene nada para hacer con el enlace de tiempo de ejecución.

+2

Para aclarar: puede haber más de un Web.config en su proyecto. Agregue la información de ensamblados anterior a la configuración ubicada en el nivel del proyecto, no a la de su carpeta Vistas. no se olvide de quitar la etiqueta de cierre "/" en la primera etiqueta de compilación de cierre automático –

+1

Aunque esto resolvió mi problema, todavía no entiendo por qué tuve que hacerlo. Ya tenía una referencia a System.Data.Entity en mi proyecto, pero estaba obteniendo errores de tiempo de ejecución que indicaban que no podía encontrar el ensamblado. Cuando lo agregué en web.config en la sección de ensamblajes, el problema desapareció. Necesito que alguien me explique por qué tengo que tener ambos. – Ray

+0

Agregar una referencia agrega a su proyecto (archivo de proyecto y carpeta bin) esa referencia. Sin embargo, no implementa su archivo de proyecto. Esto significa que puede publicar su aplicación web con su dll en la carpeta bin pero su aplicación web no sabe que está allí cuando compila toda su aplicación en el servidor en la primera solicitud. Como dije, esa sección se verifica en tiempo de compilación (porque su servidor puede recompilar el código). Es por eso que debe incluir esa información en su configuración web, porque ese web.config es el archivo que se implementa en su servidor. –

4

Acabo de experimentar el mismo problema con MVC 4 en VS Express 2012 para Web, pero, aunque la respuesta de Alfonso fue mucho más útil que cualquier otra que encontré en la Web, desafortunadamente no solucionó el error en mi proyecto. Después de hacer algunas investigaciones en Internet (en vano) y luego hurgar en Visual Studio, encontré la siguiente solución.

Además de añadir a ADO.NET Entity Framework referencias de mi proyecto y agregar la etiqueta a mi Web.config, también tuvieron que tomar las siguientes medidas para satisfacer el compilador:

  1. Haga clic en la carpeta Referencias> Añadir Referencia ...
  2. Expanda Conjuntos en el lado izquierdo de la ventana y seleccione Marco.
  3. Desplázate y selecciona System.Data.Entity en la lista de ensamblajes.
  4. Asegúrese de que la casilla junto a System.Data.Entity esté marcada, luego haga clic en 'Aceptar'.
  5. Reconstruye el proyecto.
+0

Buen trabajo. Esta fue la salsa especial que me faltaba. – Ellesedil

Cuestiones relacionadas