0

.NETプロジェクトに参照として含まれているレガシーVB6COMDLLがあります。私の手動ビルドプロセスは次のようになります。

  1. VB6DLLをビルドする
  2. VB6DLLを参照ディレクトリにコピーします
  3. VB6DLLをに登録するregsvr32
  4. .NETプロジェクトで、古い参照を削除します
  5. 新しいVB6DLLへの参照を追加(参照)
  6. 参照のIsolatedプロパティをTrueに設定します
  7. .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で自動的に上書きする必要があると思います。また、プロパティVersionMajorVersionMinorプロパティを変更する必要があるかもしれません。

残念ながら、これらは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参照を含むプロジェクトファイルへの完全修飾パスです。

4

1 に答える 1

0

私はこれを試したことはありませんが、COM DLL への参照を追加して Visual Studio に実行させるのではなく、tlbimp を使用して相互運用アセンブリを明示的に生成することで、これを実現できる可能性があります。

何かのようなもの:

  1. VB6 DLL のビルド
  2. VB6 DLL を参照ディレクトリにコピーする
  3. tlbimp を (たとえば、バッチ ファイルから) 実行して、相互運用アセンブリを参照ディレクトリに生成します。
  4. .NET プロジェクトには、手順 3 で出力された相互運用機能アセンブリへの参照が必要です。
  5. .NET ソリューションを構築する

あなたの方法を使用すると、登録不要の COM を使用しなくなりました

Reg-free COM の経験はあまりありませんが、Isolated プロパティを設定する代わりに、コマンド ライン ツールを使用して手動でマニフェストを生成することもできます。たとえば、この回答で説明されている MT.EXE ツールを使用します。

于 2012-05-23T20:19:52.700 に答える