.NET プロジェクトで参照される COM DLL の正しいバージョンを維持する
質問
.NET プロジェクトで COM DLL を参照したいのですが、作成された相互運用 DLL のバージョンが正しいことも確認したいと考えています (DLL をいつ変更する必要があるかをパッチが認識できるようにするため)。
私が使うなら TlbImp
必要なバージョンを指定できます /asmversion
フラグを付けていますが、Visual Studio から直接追加すると、元の COM DLL のバージョンとは関係のないバージョンが取得されます。
のバージョンを変更してみました .vcproj
ファイル
<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>
しかし、プロジェクトは次のエラーでビルドに失敗しました。
エラー CS0246:型または名前空間名 'MYDLLLib' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が不足していますか?)
すべての COM 参照を作成せずにこれを行う方法はありますか? TlbImp
あらかじめ?
もし答えが はい メジャー バージョンとマイナー バージョンに加えてビルド番号を指定する方法はありますか?(例: 1.2.42.0)
解決
GUID は、DLL を直接参照するのではなく、TypeLib の GUID を参照します。バージョン番号は DLL ではなく TypeLib のバージョンを指します。
バージョン番号は idl ファイルから取得されますが、サポートされるのはメジャー バージョンとマイナー バージョンのみであり、ビルド バージョンはサポートされないと思います。typelib を変更すると、このバージョンも変更されますか?
バージョン番号はレジストリ内の次の場所に表示されます。
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
マイナー バージョンが 0 に設定されている場合、メジャー バージョンと一致する「最新」バージョンがインポートされると思いますが、メジャー バージョンは何かに設定する必要があります。