Path e dll copy/paste.

Başlatan mir_as82, 27 Mart 2019, 03:11:23

mir_as82

Windows altında çalışan IIS tarafından dışarı açılan bir uygulamanın A.dll diye bir dll inin olduğu yere yine A.dll İsminde bir dll copy/paste yaparken daha önce o pathte bulunan eski dll in adını,A-copy.dll yapınca, A-copy.dll i referansn aldı uygulama. IIS recycle etmeme rağmen.
Bunun sebebi ne olabilir ?

yas

ilginç REGSVR32 direktifiyle ile önce DLL kaydını kaldırıp sonra yeni DLL işletim sistemine aynı direktifle kayıt ettirmeyi deneyin.

M.Salim GÜLLÜCE

Alıntı yapılan: mir_as82 - 27 Mart 2019, 03:11:23Windows altında çalışan IIS tarafından dışarı açılan bir uygulamanın A.dll diye bir dll inin olduğu yere yine A.dll İsminde bir dll copy/paste yaparken daha önce o pathte bulunan eski dll in adını,A-copy.dll yapınca, A-copy.dll i referansn aldı uygulama. IIS recycle etmeme rağmen.
Bunun sebebi ne olabilir ?

Probleminin ne olduğunu anlaşılmıyor. Soru var ama problem olan olay yok.

mir_as82

Aldığım mesaj şu:MyDll.dll in olduğu path içinde hem MyDll.dll var hemde  benim bin altına attığım dll

[FileLoadException]: Could not load file or assembly 'MyDll - Copy (2)' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
[ConfigurationErrorsException]: Could not load file or assembly 'MyDll - Copy (2)' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config line 111)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
   at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
[HttpException]: Could not load file or assembly 'MyDll - Copy (2)' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config line 111)
   at System.Web.HttpRuntime.FirstRequestInit(HttpContext context)
   at System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)
   at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
--><!--
This error page might contain sensitive information because ASP.NET is configured to show verbose error messages using &lt;customErrors mode="Off"/&gt;. Consider using &lt;customErrors mode="On"/&gt; or &lt;customErrors mode="RemoteOnly"/&gt; in production environments.-->

yas

@Mehmet Salim GÜLLÜCE hocam, eğer ben yanlış anlamadıysam, sorun şöyle; server mantığı ile çalışan bir uygulama var "A.dll" isminde bir nesne kullanıyor. Bu bahsi geçen "A.dll" isimli dosyanın farklı bir versiyonu var aynı isimde, yeni bir kurulum yapılmadan "A.dll" dosyası değiştirilmek isteniyor. mevcut olanın ismi editlenip "A-copy.dll" yapılıyor aynı dizine değiştirilmek istenen "A.dll" kopyalanıyor. Ama uygulama "A-copy.dll" olan dosyayı kullanmaya devam ediyor deniyor.
Uygulama işletim sistemine kurulurken yanında gelen dll ocx türü nesneler setup sırasında register edilir. İlgili nesneler sistem tarafından kullanılıyorsa yada sürüm farkları varsa kontrol edilmiş olur. Değiştirilmek istenen "A.dll" dosyasının önceki ile arasında versiyon farkı yoksa uygulama yeni dosyayı kullanmaya devam eder. Versiyon farkı varsa zaten uygulama hata verip kapanacaktır.

yas

Üsteki mesajı yazarken yeni ileti gelmiş.
Şunu yapman gerekecek. Derlemeden önce eski dll projeden çıkartıp yeni dll i projeye dahil ettikten sonra derlemeyi gerçekleştir.

mir_as82

Bu proje canlı ortamda koşan bir uygulama hocam. Derleme farklı bir buildserverda yapılıp, uzak sunucuya atılıyor. Bunu yapamam yani.
Bu hata alınmasının ana sebebi nedir?

yas

Alıntı YapCould not load file or assembly &#39;MyDll - Copy (2)&#39; or one of its dependencies. The located assembly&#39;s manifest definition does not match the assembly reference.

ibareden anlaşılacağı üzere bu derlemedeki başvurunun eşleşmediğini söylüyor.
Burayı işaret ediyor.
Alıntı YapException from HRESULT: 0x80131040) (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config line 111

Yeni derleme olmadan çözümü var mı bilemiyorum.

M.Salim GÜLLÜCE

Alıntı yapılan: yas - 27 Mart 2019, 15:32:10@Mehmet Salim GÜLLÜCE hocam, eğer ben yanlış anlamadıysam, sorun şöyle; server mantığı ile çalışan bir uygulama var "A.dll" isminde bir nesne kullanıyor. Bu bahsi geçen "A.dll" isimli dosyanın farklı bir versiyonu var aynı isimde, yeni bir kurulum yapılmadan "A.dll" dosyası değiştirilmek isteniyor. mevcut olanın ismi editlenip "A-copy.dll" yapılıyor aynı dizine değiştirilmek istenen "A.dll" kopyalanıyor. Ama uygulama "A-copy.dll" olan dosyayı kullanmaya devam ediyor deniyor.
Uygulama işletim sistemine kurulurken yanında gelen dll ocx türü nesneler setup sırasında register edilir. İlgili nesneler sistem tarafından kullanılıyorsa yada sürüm farkları varsa kontrol edilmiş olur. Değiştirilmek istenen "A.dll" dosyasının önceki ile arasında versiyon farkı yoksa uygulama yeni dosyayı kullanmaya devam eder. Versiyon farkı varsa zaten uygulama hata verip kapanacaktır.
Teşekkürler Şimdi Daha iyi anladım.
Başka olaylardada benim başıma geliyordu benzer Şeyler.
Sanırım windowsun fazla akıllı ve korumacı yapısıyla ilgili olsa gerek.
başka klasöre taşısam bile takip edip onun yolu üzerinden işlem yapıyordu. Silinmesinede müsade etmiyordu.

Regedit ten ilgili bağlantıyı silerek ancak çözüm bulabiliyordum. Tabiiki sistemi yeniden boot etmeden dosya serbest kalşmıyordu. Fakat bazı riskleride war tabiiki registry key yedeği illaki alınmalıydı her ihtimale karşı...

Arkadaşa yardım etmek biraz beni aşar sanki...
Uzaktan server üzerinde hemde... :-X  :'(