Предотвратете повторното използване на асемблиране на .NET по време на COM повикване

Създавам .NET сборка с COM интерфейс. В идеалния случай бих искал ключовете на системния регистър да са отделени от сборката, така че изпълнението на издание трябва само да пусне .dll на споделено устройство (вместо да се налага да изтласквам MSI всеки път)

Създадох различни класове, които наследиха от основния клас, за да получа различни GUID за всяка среда.

Въпреки това, когато тествам това, първата заредена версия (напр. разработка) завършва с обслужване на повиквания за другите среди (напр. тест) по-късно. Това обикновено не би било проблем, но когато се използва, този компонент се извиква от цял ​​ден работещ GUI изпълним файл. Възможно е хората да работят в различни среди през целия ден.

Всеки интерфейс има независим набор от кодова база в регистъра (без GAC) и мониторът на процеса показва, че и двата модула са заредени, но се използва само първият. Предполагам, че това е така, защото .NET вижда същото име на клас/сглобка и използва повторно първото заредено.

Как мога да изолирам сглобките в тази ситуация?


person TownCube    schedule 08.05.2016    source източник


Отговори (1)


Можете силно да наименувате сглобките (раздел „подписване“ в свойствата на проекта във Visual Studio, за да не се бърка с подписването на Authenticode) и да промените номера на версията, публичния ключ или и двете за различните версии/среди. По този начин програмата за зареждане на CLR асемблиране ще ги счита за различни и няма да се свързва с тази, която вече е заредена в дадения контекст.

person cynic    schedule 08.05.2016