Предистория
Имам 2 софтуера, написани на C#, които използват същата външна dll за телефония.
Проблем
Когато deploy-на нова версия на някой от тези софтуери, deploy-вам и нова версия на dll-ката. Така се презаписват референциите към старата, което спира работата на софтуера,тъй като новата dll не е съвместима със старата версия.
Опити за решение на проблема
-Deploy-нах новия софтуер с версия на dll-ката,която не иска регистрация. Не работи, защото dll-ката не е strong name. Резултатът от sn:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools>sn.exe -e "theDll.dll" key
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.17929 Copyright (c) Microsoft Corporation. All rights reserved.
theDll.dll does not represent a strongly named assembly
- Попитах продавача на dll-ката за версия, която е strong name. Резултатът беше „ъ?“. Dll-ката работи чудесно и не искам да търся нов производител, освен ако не ми се налага.
- Да направя dll-ката strong name чрез ildasm:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools>ildasm.exe "theDll.dll" /out=theDll.il
error : 'theDll.dll' has no valid CLR header and cannot be disassembled
Изглежда тя е unmanaged, и от там е невъзможно да стане strong named(ако не се лъжа).
- Използвах SetDllDirectory и LoadLibrary да заредя правилната версия на dll.Това донякъде проработи, поне мога да я заредя от конкретно място без да я регистрирам. Това обаче ми звучи много объркан начин да се прави.
Въпроси
- Някой правил ли го е по начина с LoadLibrary и може ли да потвърди, че работи добре когато трябва да се инстанцират класове?
- Някой има ли по-добро решение на проблема?