Переключение сборок взаимодействия с разными GUID - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть C ++ COM компонент / DLL, который я хочу загрузить в мое C# приложение. Я создал сборку взаимодействия с tlbImp.exe , и это работало последние пару лет.

У меня есть разные версии моего приложения. В соответствии с различными версиями моего приложения я назначаю компоненту COM другой GUID, чтобы их можно было устанавливать рядом. У меня есть свой Guid для моей среды разработки.

После того, как я скомпилировал свое приложение, файлы упакованы вместе, и соответствующая сборка взаимодействия помещается в пакет. До сих пор я использовал. Net framework 2.0, потому что у меня были клиенты, которые не могли обновиться. Этот клиент перешел на более новую версию. Net Framework, и я могу обновить приложение до. Net 4.5.2.

Когда мое приложение загружается, оно получает объект класса класса COM-компонент посредством вызова метода другого класса. Метод передает мне объект, который является правильным. с VID GUID. Я пытаюсь преобразовать этот объект типа Object в тип CCHView, который является интерфейсом, сгенерированным tlbImp.exe . Проблема в том, что тип CCHView, на который ссылаются, все еще имеет GUID разработки.

Object interopObject = InteropController.GetCHView(); //this object has GUID V1
if (interopObject != null)
{
             //This Type expects/has the development GUID
   _chView = (CCHView)interopObject; //this crashes in 4.5 but not in 2.0
   CCHViewCommunicator communicator = CCHViewCommunicator.Instance();
   communicator.SetControl(_chView);
   communicator.Run();
   _chViewConnector = new CCHViewConnector(_chView);
}

Кажется, что GUID разработки «запекается» в приложении, даже если сборка взаимодействия переключается при упаковке время.

Я попытался создать сборки взаимодействия для. Net 2.0 и 4.0, которые ведут себя одинаково, что означает, что оба сбоя при использовании в приложении. Net 4.5.

Ошибка возникает, когда я просто переключаю свое приложение XYZ.csproj с. Net 2.0 на. Net 4.5, все остальное остается прежним. Почему. Net 4.5 ведет себя по-разному и есть ли способ решить эту проблему?

Вот GUID, если они представляют интерес.

  • GUID V1: {D39B90BA-5CB8 -4C20-8726-3BB7758DB5D1}
  • GUID V2: {30485704-5B4E-4CED-81E9-6A49D7F3247D}
  • РУКОВОДСТВО по разработке: {6875B12E-9DF1-4896-A2D9-02FF03010
...