2012-02-26 8 views
25

Mam projekt "MVC 4" i chcę dodać zespół do pliku web.config, ale nie wiem, gdzie powinienem go umieścić. Próbuję wszelkich sposobów, ale nie mogę znaleźć rozwiązania.Jak dodać zespół w pliku web.config z mvc 4

za każdym razem mam ten błąd:

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

to mój plik 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> 

proszę mi pomóc.

dzięki.

+3

Dlaczego uważasz, że musisz dodać odniesienie w pliku web.config? Czy kompiluje się w czasie projektowania? Jeśli nie, sugerowałbym dodanie odniesienia za pomocą okna dialogowego Dodaj odniesienie. Lub lepiej, użyj nuget i instalacji struktury podmiotu – rfcdejong

+1

czy można sprawdzić http://stackoverflow.com/questions/5021248/could-not-load-file-or-assembly-system-data-entity – RickAndMSFT

+0

@ rfcdejong, już dodałem System.Data.Entity z Dodaj okno dialogowe odniesienia, ale muszę dodać ten zespół w web.config –

Odpowiedz

40

To całkiem proste. Spójrz na sekcji kompilacji w pliku web.config:

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

Teraz otwórz sekcję i umieścić montaż wewnątrz tak:

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

Biblioteki w tej części są sprawdzane w czasie kompilacji, to nie ma nic zrobić z wiązaniem czasu wykonywania.

+2

Aby wyjaśnić: w twoim projekcie może być więcej niż jeden Web.config. Dodaj powyższe informacje o złożeniach do konfiguracji znajdującej się na poziomie projektu, a nie tej w folderze Widoki. nie zapomnij usunąć znacznika zamykającego "/" w pierwszym samozamykającym się znaczniku kompilacji –

+1

Chociaż rozwiązało to mój problem, nadal nie rozumiem, dlaczego musiałem to zrobić. Miałem już odniesienie do System.Data.Entity w moim projekcie, ale dostałem błędy runtime, mówiąc, że nie można znaleźć zespołu. Kiedy dodałem go do web.config w sekcji złożeń, problem zniknął. Potrzebuję kogoś, kto wytłumaczy, dlaczego muszę mieć jedno i drugie. – Ray

+0

Dodanie odnośnika dodaje się do twojego projektu (pliku projektu i folderu bin), do którego się odwołujesz. Jednak nie wdrażasz pliku projektu. Oznacza to, że możesz opublikować swoją aplikację internetową za pomocą biblioteki dll w folderze bin, ale twoja aplikacja internetowa nie wie, że jest tam, gdy kompiluje całą twoją aplikację po stronie serwera na pierwsze żądanie. Jak już powiedziałem, sekcja jest sprawdzana w czasie kompilacji (ponieważ serwer może przekompilować kod). Dlatego musisz uwzględnić te informacje w swojej konfiguracji sieci, ponieważ ten plik web.config jest plikiem wdrożonym na serwerze. –

4

Po prostu doświadczyłem tego samego problemu z MVC 4 w VS Express 2012 dla Internetu, ale podczas gdy odpowiedź Alfonso była znacznie bardziej pomocna niż cokolwiek innego, co znalazłem w Internecie, niestety nie wyjaśniono błędu w moim projekcie. Po przeprowadzeniu badań w Internecie (bezskutecznie), a następnie po prostu grzebanie wokół Visual Studio, znalazłem następujące rozwiązanie.

Oprócz dodawania EntityFramework odniesień do mojego projektu i dodanie znacznika do mojego Web.config, miałem również podjąć następujące kroki w celu zaspokojenia kompilatora:

  1. prawym przyciskiem myszy folder References> Dodaj Referencja ...
  2. Rozwiń Złożenia po lewej stronie okna i wybierz opcję Framework.
  3. Przewiń i wybierz pozycję System.Data.Entity na liście zestawów.
  4. Upewnij się, że pole wyboru System.Data.Entity jest zaznaczone, a następnie kliknij przycisk "OK".
  5. Przebuduj projekt.
+0

Dobra robota. To był specjalny sos, którego mi brakowało. – Ellesedil

Powiązane problemy