2

.NETプロジェクトでCOMDLLを参照したいのですが、作成された相互運用機能DLLのバージョンが正しいことを確認したいと思います(パッチがDLLをいつ変更する必要があるかを認識できるようにするため)。

使用する場合はフラグを使用TlbImpして必要なバージョンを指定できますが、/asmversionVisual Studioから直接追加すると、元のCOMDLLのバージョンとは関係のないバージョンが取得されます。

.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ディレクティブまたはアセンブリ参照がありませんか?)

TlbImpすべてのCOM参照を事前に作成せずにこれを実行する方法はありますか?

答えが「はい」の場合、メジャーバージョンとマイナーバージョンに加えてビルド番号を指定する方法はありますか?(例:1.2。42 .0)

4

1 に答える 1

2

Guid は、DLL ではなく TypeLib の Guid を直接参照します。バージョン番号は、DLL ではなく TypeLib のバージョンを参照します。

バージョン番号は idl ファイルから取得されます。ビルド バージョンではなく、メジャー バージョンとマイナー バージョンのみがサポートされていると思います。typelib を変更すると、このバージョンは変更されますか?

バージョン番号は、次のレジストリに表示されます。

HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor

マイナー バージョンが 0 に設定されている場合、メジャー バージョンと一致する「最新」バージョンがインポートされると思いますが、メジャー バージョンは何かに設定する必要があります。

于 2008-09-03T14:56:05.470 に答える