.NETプロジェクトに参照として含まれているレガシーVB6COMDLLがあります。私の手動ビルドプロセスは次のようになります。
- VB6DLLをビルドする
- VB6DLLを参照ディレクトリにコピーします
- VB6DLLをに登録する
regsvr32
- .NETプロジェクトで、古い参照を削除します
- 新しいVB6DLLへの参照を追加(参照)
- 参照のIsolatedプロパティをTrueに設定します
- .NETソリューションを構築する
私はこの手順を自動化する過程にあります。ステップ4から6は私に問題を与えています。新しいVB6COMDLLを登録すると、.NETプロジェクトの古い参照が無効になります。プロジェクトファイルを見ると、次のことがわかります。
<ItemGroup>
<COMReference Include="DllName">
<Guid>{65CDCC83-E707-4AA3-8940-FE79F265D570}</Guid>
<VersionMajor>50</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>True</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
Guid
プロパティをCOMの新しいclsidで自動的に上書きする必要があると思います。また、プロパティVersionMajor
とVersionMinor
プロパティを変更する必要があるかもしれません。
残念ながら、これらはVB6COMDLLファイルのプロパティではないようです。この情報はどこで入手できますか、および/または正しい道を進んでいますか?これを自動的に行うツールやオプションはありますか?
編集
参照を更新しない場合に発生するビルドエラーは、エラーMSB3179です。
エラーメッセージの実際のテキストは次のとおりです。
c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets(2580,9):エラーMSB3179:COM参照'DllName'の分離の問題:このコンポーネントの登録済みクラスが検出されませんでした。[path / to / projfile.vbproj]
...ここで、「DllName」は私のDLL名であり、「path / to/projfile.vbproj」はCOM参照を含むプロジェクトファイルへの完全修飾パスです。