2009-11-17 8 views
9

Ich habe eine Klassenbibliothek namens "MyAssembly", die intern verweist a.dll, b.dll der Version 3.1.1.0; Ich habe das Projekt erstellt, das MyAssembly.dll outputed. Auf einem anderen System (Box) habe ich ein Webanwendungsprojekt erstellt und auf die MyAssembly.dll verwiesen. Das neue System hat neue Versionen von a.dll und b.dll 4.0.0; Ich habe verbindliche Umleitung in web.config wie unten verwendet. Aber immer noch nicht in der Lage, die Webanwendung zu kompilieren. es sagt fehlende Montage Referenz a.dll, Version 3.1.1.0.Binding Redirect-Problem in. NET

Kann irgendein Körper helfen, dieses Problem zu lösen?

Danke, Suresh

Antwort

6

Diese funktionieren sollte.

<runtime> 
<dependentAssembly> 
    <assemblyIdentity name="MyAssembly" publicKeyToken="12233444"/> 
    <bindingRedirect oldVersion="3.1.1.0" newVersion="4.0.0.0"/> 
</dependentAssembly> 
</runtime> 

Ein weiterer Vorschlag: Entfernen Sie den Namespace aus der Konfiguration tag:

Statt

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

versuchen

<configuration> 
+0

Ich tat genau das gleiche. Aber kein Glück. Beim Kompilieren des Projekts in IDE selbst geben Fehler zu sagen "fehlen Sie montagereference a.dll 3.1.1.0 – Suresh

+1

Konfigurationstag enthält keine Xmlns Attribut. Kein Glück – Suresh

+0

Es funktionierte auf meiner Seite, danke. Meine Frage ist, warum es funktioniert, wenn die xmlns Attribut wird entfernt? – csg

0

Du MyAssembly in Ihrer Web-Anwendung. Die Bindungsumleitung wird für diese Assembly verwendet und nicht für die Assemblys, die MyAssembly verwendet. Überprüfen Sie das Manifest für die MyAssembly.dll, es sollte sich auf die 3.1.1.0-Versionen von a.dll beziehen, daher wird der Compilerfehler angezeigt. Erstellen Sie das MyAssembly mit Verweis auf a.dll der Version 4.0.0.0, und verwenden Sie dann das MyAssembly in Ihrer Webanwendung. Das wird funktionieren.

0

Versuchen Sie, diese Art und Weise:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="a.dll" 
         publicKeyToken="{put a.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="b.dll" 
         publicKeyToken="{put b.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

Auch zu den Referenzen der Anwendung gehen, rechts klicken Sie auf die a.dll und b.dll, gehen Sie auf Eigenschaften und überprüfen, ob „Specific Version“ auf False gesetzt ist .

Ich hoffe, es hilft.

19

Das hat total für mich gearbeitet. HINWEIS: Sie benötigen NO-Namespace auf dem configuration-Tag. Und Sie müssen einen Namensraum auf Ihrem assemblyBinding Tag haben.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace --> 
<configuration> 
    <runtime> 
    <!-- important, must have this namespace --> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

beide von denen Sie sonst wird es ihn nicht gelesen. Wenn es einen Fehler gibt, dass es in diesem Beispiel nichts außer 2.0.0.0 laden kann, nimmt es die Konfigurationselemente nicht richtig auf.

Dies funktioniert auch nur auf stark benannten Assemblys.Um herauszufinden, ob sie etwas stark den folgenden Befehl aus dem Fenster Befehl VC genannt

öffnen (Menü Start> Alle Programme> Visual Studio> Visual Studio-Tools> Visual Studio-Eingabeaufforderung)

Dann laufen:

sn -vf "path-to-assembly.dll" 

Wenn es zurückgibt, dass es gültig ist, dann wird es stark benannt.

Quelle: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

+0

Dieses vollständig behobene Problem, das ich mit einer verbindlichen Weiterleitung hatte, die für ein Webprojekt ignoriert wird. Danke! – Jaans

+0

ICH LIEBE DICH. Sie speicherten total meine Vernunft. Ich entfernte den Namensraum vom 'Konfiguration' Umbau und es gerade gearbeitet! –

+0

Vielen Dank! Fehlt ein Namespace in der AssemblyBinding –