Domanda

Ho una DLL .NET (che sembra essere scritto in C ++ / CLI). Le parti di esso voglio esporre tramite COM. Faccio questo e registrarlo utilizzando "regasm my.dll / codebase". Fin qui tutto bene. Ma poi ho cambiato alcune cose e il numero di versione delle modifiche di montaggio, più mi sposto la dll in una cartella diversa. Posso registrarmi di nuovo e guardo il mio oggetto COM in OLE / COM Viewer. Vedo qualcosa di simile

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

Domande su più versioni:

  1. Quindi penso che l'ultimo oggetto COM che è stata registrata vittorie. Non importa se ho il mio vecchio oggetto 7.0.0.0 COM registrato, il 7.0.0.27397 è quello che verrà creato quando un'istanza di mio oggetto COM perché ho registrato l'ultima volta. E 'corretto?

  2. Ops non ho tenuto intorno all'oggetto 7.0.0.0. C'è un modo per sbarazzarsi di esso? C'è un modo per rimuovere tutte le versioni di un oggetto COM altri che andare nel Registro di sistema e whacking a mano?

  3. Solo per curiosità, se avessi voluto specificamente per creare un'istanza di una particolare versione del mio oggetto COM c'è un modo per farlo? (Sto usando C ++ se si voleva dare un esempio di codice).

  4. C'è un modo posso solo dire regasm di non memorizzare il numero di versione perché appena sembra essere ingombrare le cose e non riesco a vedere ciò che il beneficio è. Se il mio oggetto COM ha attraversato significativi cambiamenti API che avevo appena cambiare il GUID e ProgID, giusto? Che cosa succede se non voglio registrare più versioni (io no).

È stato utile?

Soluzione

Ho sempre impostato il mio COM assemblee visibili con un AssemblyVersion statica proprio per questo motivo. Se si vuole avere binari contrassegnati con una versione, utilizzare al posto AssemblyFileVersion.

  1. Ultimi vittorie oggetto registrato: sì
  2. Non proprio. Si può mettere roba in ComRegisterFunction della vostra assemblea / ComUnregisterFunction attribuito metodi per automatizzare la pulizia, ma se si lascia vecchi escrementi versione in giro, questo è l'unico modo.
  3. l'avrebbe fatto con un diverso GUID coclasse e / o ProgID (ad esempio, MyCoClass.1, 0,2, ecc). CoCreateInstance non sa nulla circa la versione VALORI sono utilizzati da attivatore del CLR per assicurarsi che caricato il gruppo di destra.
  4. No- cosa migliore da fare è non cambiare mai la tua versione di montaggio (vedi sopra).

Altri suggerimenti

Componenti con lo stesso CLSID devono essere compatibili, soprattutto se hai cambiato solo il numero di build tra le assemblee. Ecco l'unico cosa rilevanti che ho trovato per confermare questa googling rapidamente.

Per rispondere direttamente alle vostre domande:

  1. Una corretta.
  2. regasm / unregister
  3. Se vuoi in redirect Binding .
  4. Probabilmente no.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top