msbuild プロジェクトのすべての参照とディスク上のそれらの場所を一覧表示しようとしています。
これまでのところ、プロジェクト参照とアセンブリ参照は問題なく取得できますが、COM 参照に問題があります。これは、プロジェクト ファイル内のほとんどの参照がどのように見えるかです。
<COMReference Include="[name of assembly]">
<Guid>{GUID-GOES-HERE}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
COM DLL へのパスを取得する方法がまったくわかりません。少しグーグルで調べたところHKEY_CLASSES_ROOT\CLSID\{GUID-FOUND-IN-PROJECT-FILE}\InprocServer32
、キーのデフォルト値を見て取得できることがわかりました。regedit を使用してレジストリを調べると、正しいように見えますが、C# でこれを行うたびに、レジストリ キーは常に null です。私もWow6432Node\CLSID
同じ結果で下を見ました。
グーグルは、msbuildResolveComReference
タスクと、Microsoft.Build
名前空間を使用してプログラムでmsbuild(ResolveComReference class)を使用する方法をさらに見つけましたが、単一のタスクを実行する代わりに、この名前空間を使用してプロジェクト全体をビルドする方法しか見つけられませんでした。
プロジェクト ファイルの情報を使用して COM DLL の場所を取得するにはどうすればよいですか?
編集
これを行う理由は、ビルド プロセスを自動化するためです。一方では、これにより、COM DLL をインストーラーに含めることができます (WiX の Heat ツールまたは John Robbin の Paraffin ツールを使用)。一方で、msbuild で発生した問題を回避できます。msbuild にすべての依存関係を解決させます。Project1 と Project2 の両方が同じ COM DLL を参照し、Project1 が Project2 を参照する場合、COM DLL を 2 回追加しようとするため、クラッシュします。