.NET/COM은 Regasm을 통해 등록 된 여러 버전에서 어떻게 작동합니까?

StackOverflow https://stackoverflow.com/questions/1718641

  •  19-09-2019
  •  | 
  •  

문제

.NET DLL이 있습니다 (C ++/CLI로 작성됩니다). 그것의 일부는 com을 통해 노출하고 싶습니다. 나는 이것을하고 "regasm my.dll /codebase"를 사용하여 등록합니다. 여태까지는 그런대로 잘됐다. 그러나 어셈블리 변경의 일부와 버전 번호를 변경하고 DLL을 다른 폴더로 이동합니다. 다시 등록하고 OLE/COM 뷰어에서 COM 객체를 봅니다. 나는 이런 것을 본다

InprocServer32 [Codebase] = file://c://foo/bar/my.dll
7.0.0.0 [Class] = My.Blah.Class
7.0.0.0 [Assembly] = Sync, Version=7.0.0.0, Culture=neutral, PublicKeyToken=1dd19234234
7.0.0.0 [RuntimeVersion] = v2.0.50727
7.0.0.0 [CodeBase] = file://c:/dooby/do/my.dll
7.0.0.27397 [Class] = My.Blah.Class
7.0.0.27397 [Assembly] = Sync, Version=7.0.0.27397, Culture=neutral, PublicKeyToken=1dd19234234
7.0.0.27397 [RuntimeVersion] = v2.0.50727
7.0.0.27397 [CodeBase] = file://c://foo/bar/my.dll

여러 버전에 대한 질문 :

  1. 그래서 나는 등록 된 마지막 com 객체가 승리한다고 생각합니다. 이전 7.0.0.0 COM 객체가 등록되어 있는지 여부는 중요하지 않습니다. 7.0.0.27397은 COM 객체를 마지막으로 등록하여 인스턴스화 할 때 생성 될 것입니다. 그 맞습니까?

  2. 죄송합니다. 7.0.0.0 객체를 유지하지 않았습니다. 그것을 제거 할 방법이 있습니까? 레지스트리로 들어가서 손으로 휘젓는 것 외에 다른 버전의 COM 객체를 제거하는 방법이 있습니까?

  3. 호기심이 없어도, 내가 구체적으로 내 COM 객체의 특정 버전을 인스턴스화하고 싶다면 그렇게 할 수있는 방법이 있습니까? (코드 예제를 제시하려면 C ++를 사용하고 있습니다).

  4. 버전 번호를 저장하지 말라고 Regasm에게 말할 수있는 방법이 있습니까? 내 COM 객체가 중요한 API 변경을 겪었다면 Guid와 Progid를 변경 하시겠습니까? 여러 버전을 등록하고 싶지 않다면 어떨까요 (그렇지 않습니다).

도움이 되었습니까?

해결책

나는 항상 이런 이유로 정적 조립 전환으로 내 com 보이는 어셈블리를 설정했습니다. 바이너리가 버전으로 태그를 달고 싶다면 대신 AssemblyFileVersion을 사용하십시오.

  1. 마지막으로 등록 된 객체 승리 : 예
  2. 설마. 청소를 자동화하는 방법에 기인 한 어셈블리의 ComegisterFunction/ComUnregisterFunction에 물건을 넣을 수 있지만 이전 버전의 배설물을 남겨두면 유일한 방법입니다.
  3. 다른 Coclass Guid 및/또는 Progid (예 : Mycoclass.1, .2 등)로 수행합니다. CocreateInstance는 버전 값에 대해 아무것도 알지 못합니다. CLR의 활성기가 올바른 어셈블리를로드하기 위해 사용합니다.
  4. 최선의 방법은 어셈블리 버전을 변경하지 않는 것입니다 (위 참조).

다른 팁

동일한 CLSID를 가진 구성 요소는 특히 어셈블리간에 빌드 번호 만 변경 한 경우 호환됩니다. 여기 유일한 것입니다 관련 있는 인터넷 검색으로 이것을 확인하는 것이 발견되었습니다.

질문에 직접 답변하려면 :

  1. 옳은.
  2. Regasm /Register
  3. 들여다보다 바인딩 리디렉션.
  4. 아마 그렇지 않을 것입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top