2013-02-24 8 views
41

Zauważyłem tę sekcję w moje pliki web.config na chwilę, a ja teraz stara się rozumieć, co dokładnie celem jest:Jakie jest znaczenie/przyczyna wygenerowanych wpisów w pliku web.config> configuration> runtime> assemblyBinding?

<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="0.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> 

Tak, pierwsza pozycja zdaje się mówić:

System.Web.Helpers to nazwa zależnego zestawu z publicznym znacznikiem klucza z 31bf3856ad364e35. Przekieruj wersję 1.0.0.0 do od 2.0.0.0 do wersji 2.0.0.0.

Moje najlepsze przypuszczenie jest takie, że oznacza to, że każdy kod wykonywany w kontekście czasu działania ASP.NET, który zależy od zestawu o określonej nazwie, który ma również wersję w podanym zakresie, jest wykonywany tak, jakby został skompilowany z określoną wersją z określonym kluczem publicznym.

Czy to oznacza, że ​​mam projekt WWW, który zależy od biblioteki klas i że biblioteka klas odwołuje się do starszej wersji zestawu, która ma wartość bindingRedirect, że kod zostanie wykonany tak, jakby był skompilowany nowsza wersja?

Odpowiedz

26

Czy to znaczy, jeśli mam projekt internetowy, który zależy od klasy biblioteki i że biblioteka klasa ma odniesienie do starszej wersji zespołu który ma aa bindingRedirect, że kod będzie wykonywał jako jeżeli zostały skompilowane przeciwko nowszej wersji?

Trzeba to dobrze (ja po prostu powiedzieć „... kod wykona jako gdyby przedstawieniu nowszą wersję”), patrz http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx

„Kiedy zbudować .NET Aplikacja ramowa dla konkretnej wersji silnie nazwanej , aplikacja używa tej wersji zestawu w czasie wykonywania.Niektóre jednak może być konieczne, aby aplikacja działała na nowszą wersję zespołu. "

+0

dzięki, to informacje, które miałem nadzieję uzyskać. czy czujesz, że rozumiesz to do tego stopnia, że ​​twoja odpowiedź jest autorytatywna? (proszę nie brać tego w niewłaściwy sposób) –

+0

@AaronAnodide: nie, nie sądzę, że moja odpowiedź jest autorytatywna. Tak po prostu rozumiem dokumentację i użyłem jej 3 razy. Nie martw się, nie biorę tego źle ;-) – jbl

+2

Tak, macie rację, użyłem tego do tego samego celu; na przykład mówię, że mam bibliotekę o nazwie libA.dll i inną bibliotekę o nazwie libB.dll. Moja wersja libA.dll jest kompilowana przeciwko wersji 1.0 biblioteki libB.dll. Zaktualizowałem moją aplikację do nowszej wersji libB.dll (powiedzmy 1.5), a libA.dll już nie działa. Chciałbym użyć tej funkcji, by polecić środowisku wykonawczemu, aby libA.dll działało z nowszą wersją libB.dll (drugą, prawdopodobnie lepszą opcją jest, jeśli posiadam kod źródłowy libA.dll do kompilacji go z nowszą wersją libB.dll). –

Powiązane problemy