2013-02-06 27 views
10

Nasıl düzeltebilirim?.NET Dll Cehennem nasıl çözülür?

NewtonSoftJson.dll kullanan 2 üçüncü taraf derlemeler var. Yakalananlardan biri daha eski 3.x.x ve 4.5.x kullanılarak başka bir kullanıldı. Yani çalışma zamanında 2 meclisin en az 1 diğeri hakkında şikayet ediyor.

Bunu nasıl çözebilirim? Hizmet kurabilirdim, ancak kodlar ve ortamlar şu anda bu şekilde kurulmuyor. Aynı zamanda belirli bir zaman diliminde güvenli bir şekilde yapılabileceğinden çok fazla refakatör oluyor.

+0

Her iki grup da aynı dizinde mi? –

+0

Bu yardımcı olabilir: http://blogs.msdn.com/b/abhinaba/archive/2005/11/30/498278.aspx – Oded

+1

http://stackoverflow.com/questions/3158928/referencing-2-differents-versions -of-log4net-in-the-aynı-çözüm – Oded

cevap

4

Newtonsoft ve başka bir üçüncü taraf kitaplığı ile ilgili kesin sorun oldu. Newtonsoft v3.x ve v4.x ile ilgili sorun, daha yeni kütüphanenin artık bir ortak anahtar jetonuyla gelmesidir. Bu, montaj yönlendirme çözümünü işe yaramaz hale getirdi; ancak diğer çoğu vaka için mükemmel bir çözümdür.

Üçüncü taraf kitaplığını yeniden kendim atandım. Üçüncü taraf kitaplığının kaynak koduna erişiminiz varsa, kitaplığı her zaman yeni Newtonsoft DLL kullanarak yeniden oluşturabilirsiniz. Yöntem imzasının herhangi biri değiştiyse küçük değişiklikler yapmanız gerekebilir.

+0

Aynı problemi çalıştırın, bir LITTLE uygulamasını indirin (sadece birkaç Kbs) ve sahip olmadığım bir çerçeve sürümüne ihtiyacınız var. Yüklemek için, hayal kırıklığına (versiyon cehennemine) yol açabilecek bir şey aramak zorundasınız. Bu bir LITTLE uygulamasıdır ancak etrafında saçmalıklara ihtiyaç vardır. Çerçeveyi yükledikten sonra güncellemelere ihtiyaç duyar (sonsuz güncellemeler gibi görünür). Bu, bir uygulamayı dağıtmak için çok kullanıcı dostu ve çılgın bir yol değil.Şimdi anlıyorum neden Windows bu kadar büyük ve şimdi neden dünyada çok cesur tüysüz erkek olduğunu biliyorum. Ürünleriniz için .NET'i kullanmak için iki kez düşünün. – Codebeat

3

Microsoft makale "Redirecting Assembly Versions" bu konuda şöyle demektedir:

Aşağıdaki örnek diğerine MyAssembly bir sürümünü yönlendirmek ve mySecondAssembly yayıncı politikasını nasıl kapatılacağı gösterir.

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="myAssembly" 
      publicKeyToken="32ab4ba45e0a69a1" 
      culture="en-us" /> 
     <!-- Assembly versions can be redirected in application, 
      publisher policy, or machine configuration files. --> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="mySecondAssembly" 
     publicKeyToken="32ab4ba45e0a69a1" 
     culture="en-us" /> 
     <!-- Publisher policy can be set only in the application 
      configuration file. --> 
     <publisherPolicy apply="no" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+2

Bunu nasıl yapacağınızı gösterebilir misiniz? NewtonSoftJson'un farklı bir versiyonuna bağımlılığı olan montaj doğru versiyonu alır mı? – Oded

+0

@Oded: Yapamam. Bunu şimdi keşfetmek için zamanım olmadı. Belki bu hafta sonu. –

2

Genellikle, uygulama/web config yapılandırma aracılığıyla bu sorunu çözmek. Özel bir yolu belirlemek için sondalama elemanını kullanmak ve ayrı klasörlerde iki sürümü koyabilirsiniz:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

başka yolu Derleme bağlama yeniden yönlendirmesi kullanmaktır. Ancak bu sadece sürümlerin uyumlu olduğunu biliyorsanız çalışır. Onları doğrudan kullanmadığınızdan beri bunu bildiğinizden emin değilim ve yayıncı derleme sürümünü değiştirerek bazı uyumsuzluklar gösterdi.

1

Decompiler kullanarak sona erdi, çözümü projeye ekleyin, yeni DLL'lere başvurun, hataları düzeltin ve yeniden derleyin, yeni eklenen projeyi işaret edin.

Genel anahtar belirteci değiştiğinden, montaj yönlendirmesini kullanamadım. Anlaşılan referanslardan birini derlemek için farklı bir anahtar kullanıldı. Daha sert önlemlere başvurmak zorunda kaldı.

İlgili konular