2009-07-22 12 views
5

Gibt es eine Möglichkeit, die Verwendung einer bestimmten DLL-Version zu erzwingen? aus der app.config?Gibt es eine Möglichkeit, eine DLL-Version zu erzwingen?

(Hintergrundgeschichte) Wir verwenden SQL Compact 3.5, und kann aus geschäftlichen Gründen (ja, ich weiß) nicht auf SQL Compact 3.5 SP1 für den Moment verschieben. Wir haben die System.Data.SqlServerCe und alle unmanaged DLLs in unserem Build-Verzeichnis, aber wenn SP1 installiert ist, wird die App geladen und verwendet die SP1 Managed DLL (und von der Erweiterung nehme ich auch die nicht verwalteten an).

Die Versionsnummer des Pre-sp1 dll ist 3.5.0.0, die sp1-Version 3.5.1.0

ich den Verweis auf die System.Data.SqlServerCe zu Copylocal = true und spezifische Version eingestellt habe = true, aber es verwendet immer noch die SP1-Version, auch wenn sich die pre-sp1-Version in unserem Build-Verzeichnis befindet (davon ausgehend, dass die Version aus dem GAC verwendet wird). Ich habe versucht, die Referenz von der GAC hinzufügen, sowie manuell in das Dateisystem gehen und direkt auf die DLL verweisen.

(nur um deutlich zu machen, sind Kunden den Service Pack für andere Software zu installieren, die es braucht, aber wir müssen noch die Pre-SP1-Version ausgeführt werden, auch wenn der Service Pack installiert ist)

Gibt es ein So erzwingen Sie, dass .net das verwendet, das wir in unserem Build-Verzeichnis haben?

UPDATE:

Ich habe eine Überschreibung in der App Config wie this question, aber die Montage Bindung Log Viewer läuft, gibt mir diese:

LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Projects\ConsoleApplication11\bin\Debug\ConsoleApplication11.exe.Config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Redirect found in application configuration file: 3.5.0.0 redirected to 3.5.0.0. 
LOG: Publisher policy file is found at C:\Windows\assembly\GAC_MSIL\policy.3.5.System.Data.SqlServerCe\3.5.0.0__89845dcd8080cc91\publisher.config. 
LOG: Publisher policy file redirect is found: 3.5.0.0 redirected to 3.5.1.0. 
LOG: ProcessorArchitecture is locked to MSIL. 
LOG: Post-policy reference: System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL 
LOG: Found assembly by looking in the GAC. 
LOG: Binding succeeds. Returns assembly from C:\Windows\assembly\GAC_MSIL\System.Data.SqlServerCe\3.5.1.0__89845dcd8080cc91\System.Data.SqlServerCe.dll. 
LOG: Assembly is loaded in default load context. 

Es sieht aus wie die Config für den 3.5. 1 Assembly im GAC überschreibt es. Irgendeine Möglichkeit, das Problem von meiner app.config zu erzwingen?

Antwort

5

Ich habe die Lösung gefunden. Mit Blick auf den Link in Henks Antwort (here) und die Ausgabe des Fusionsprotokolls scheint das Installationsprogramm von 3.5 SP1 eine Publisher-Richtliniendatei zu installieren, die das Laden der SP1-DLL erzwingt, selbst wenn die Pre-SP1-DLL angefordert wird.

Putting dies in der app.config erzählt .net die Verleger Politik zu ignorieren, und endet mit der 3.5.0.0 Version:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" /> 
       <publisherPolicy apply="no"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
0

Es klingt, als ob Sie die Version 3.5.1.0 im Projekt referenziert haben. Ich würde versuchen, die Referenz für 3.5.1.0 zu entfernen, wenn sie unter den Referenzen des Projekts aufgeführt ist, und dann direkt auf die 3.5.0.0-DLL verweist, die Sie stattdessen verwenden möchten. Es wird jedoch nicht empfohlen, die älteren DLLs zu targetieren, wenn der Server bereits auf SP1 aktualisiert wurde (obwohl die Service Packs immer noch Abwärtskompatibilität vom Standpunkt der API aus beibehalten sollten).

+1

Nö, wir verweisen 3.5.0.0. Der Server ist bei pre-sp1, was das Problem ist, da die Replikation mit einem SP1-Client und einem Pre-SP1-Server bricht (die Aktualisierung des Servers wird passieren, nur nicht in den nächsten paar Monaten - Bürokratie und all das) – Gareth

Verwandte Themen