2009-07-22 48 views
5

Belirli bir dll sürümünün kullanımını zorlamak için bir yol var mı? app.config'tenBir dll sürümünü kullanarak zorlamak için bir yolu var mı?

(backstory) SQL Compact 3.5 kullanıyoruz ve iş nedeniyle (evet, biliyorum) şimdilik SQL Compact 3.5 SP1'e geçemiyoruz. System.Data.SqlServerCe ve derleme dizinimizdeki tüm yönetilmeyen dll'lerimiz var, ancak SP1 yüklüyse, uygulama yüklenir ve SP1'in yönetilen dll'sini kullanır (ve uzantı olarak, yönetilmeyenleri de varsayardım).

öncesi sp1 dll sürüm numarası 3.5.0.0 olduğunu sp1 version = ben CopyLocal için System.Data.SqlServerCe = true ve Özgül Sürüm referansı kurdum 3.5.1.0

olduğunu true, ancak SP1 sürümü, pre-sp1 sürümü derleme dizinimizde olsa bile (GAC'den birini kullandığını varsayar) hala kullanıyor. Referansı GAC'den eklemenin yanı sıra dosya sistemine manuel olarak girmeyi ve dll'ye doğrudan başvurmayı denedim.

(sadece istemciler ihtiyacı diğer yazılım için hizmet paketi yüklüyorsanız, şunu açıklığa kavuşturalım, ama biz hala hizmet paketi yüklü olduğunda bile önceden sp1 sürümünü çalıştırmak için gereken kadar)

mi var herhangi Oluşturma dizinde sahip olduğumuz birini kullanmak için zorlamak için .net

GÜNCELLEME:

Ben this question gibi uygulama config geçersiz kılma koymak, ancak montaj bağlama günlük görüntüleyici olan bana verir bu:

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. 

Bu 3.5 için yapılandırma benziyor. GAC'de 1 montaj, onu geçersiz kılar. Sorunu app.config sayfamdan zorlamak için herhangi bir yol var mı?

cevap

5

Çözümü buldum. Henk'in (here) cevabındaki bağlantıya ve füzyon günlüğünün çıktısına bakıldığında, 3.5 SP1 yükleyicisinin, sp1 dll'nin yüklenmesini zorlayan bir yayıncı ilke dosyası yükler, önceden sp1 dll'si istendiğinde bile. app.config bu koyarak

yayıncı politikasını görmezden .net, ve 3.5.0.0 sürümünü kullanarak biter anlatıyor:

<?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

Projede başvurulan 3.5.1.0 sürümüne sahip olduğunuz anlaşılıyor. Başvurunun referansları altında listeleniyorsa 3.5.1.0 için referansı kaldırmayı ve bunun yerine kullanmak istediğiniz 3.5.0.0 dll'yi doğrudan referanslamayı denerim. Ancak, sunucu zaten SP1'e yükseltilmişse eski dll'leri hedeflememesi önerilir (hizmet paketleri hala bir API açısından geriye dönük uyumluluk sağlamalıdır).

+1

Hayır, biz 3.5.0.0 durumdayız. Sunucu bir sp1 istemcisi ve bir pre-sp1 sunucusu (sunucu yeni bir ay içinde olmayacak - yeni bir bant ve tüm bu gerçekleşecek) bir çoğaltma kırıyor gibi sp1 pre-sp1'de sorunudur. – Gareth

İlgili konular