Mantenere la versione corretta per una dll COM di riferimento in una .Progetto in rete
Domanda
Voglio fare riferimento a una DLL COM in .Progetto in rete, ma voglio anche assicurarsi che l'interop DLL creata avrà la versione corretta (in modo che le patch si sa quando la DLL deve essere modificato).
Se io uso TlbImp
Posso specificare la versione richiesta con la /asmversion
bandiera, ma quando aggiungo direttamente da Visual Studio si ottiene una versione che non ha nulla a che fare con l'originale COM DLL della versione.
Ho provato a cambiare la versione in .vcproj
file
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<!-- I changed this -->
<VersionMajor>1</VersionMajor>
<!-- This too -->
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
Ma poi il progetto non è riuscito a costruire con il seguente errore:
errore CS0246:Il tipo o il nome dello spazio dei nomi 'MYDLLLib' non trovato (manca una direttiva using o un riferimento a un assembly?)
C'è un modo per ottenere questo fatto, senza creare tutti i miei COM riferimenti con TlbImp
in anticipo?
Se la risposta è sì c'è un modo per specificare un numero di build in aggiunta alle versioni principali e secondarie?(e.g 1.2.42.0)
Soluzione
Il Guid si riferisce il Guid per la Libreria non la DLL direttamente.I numeri di versione, fare riferimento alla Libreria dei tipi versione non la Dll.
Il numero di versione viene dal vostro file idl, e credo che supporta solo una versione maggiore e minore e non una versione build.È questo cambiamento di versione quando si modifica la libreria?
I numeri di versione verrà visualizzato nel registro di sistema sotto:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
Se il minore è impostato a 0, allora io credo che importare l'ultima versione che corrisponde alla versione principale, ma la versione principale deve essere impostato a qualcosa.