57382


`mshtml`を使用するためにソリューションエクスプローラーから`Add
References`で`Microsoft.mshtml`へのリファレンスを追加しました。

このリファレンスを追加した時にどのファイルが変更されているか気になってプロジェクト内のファイルを`ack
mshtml`で検索してみたのですが該当のテキストが見つかりませんでした。

追加されたリファレンス情報はどのファイルにどのように保存されているのでしょうか？


CC BY-SA 4.0
2019-08-15T16:21:47.913
57379
2019-08-15T23:13:23.547
2019-08-15T23:13:23.547
4236
3271
question
visual-studio .net wpf
WPFのプロジェクトでリファレンス情報の保存される場所について


正しい操作ではありません。COM - Type Librariesの一覧から`Microsoft HTML Object
Library`を選択するべきです。

* * *

.NETではタイプライブラリを直接扱うことはできません。そのため、Visual Studioは内部で[Tlbimp.exe (タイプ ライブラリ
インポーター)](https://docs.microsoft.com/ja-jp/dotnet/framework/tools/tlbimp-exe-
type-library-importer)を実行し、タイプライブラリと同等なアセンブリを生成した後に、生成されたアセンブリをプロジェクトに追加します。

しかし、このような操作でアセンブリが乱立するのは危険です。そこで.NETでは[プライマリ相互運用機能アセンブリ](https://docs.microsoft.com/ja-
jp/previous-
versions/dotnet/netframework-4.0/aax7sdch\(v=vs.100\))という機能を提供しています。その上で`Microsoft
HTML Object Library`には`Microsoft.mshtml`という名前でプライマリ相互運用機能アセンブリが登録されています。

最終的に`Microsoft HTML Object Library`を選択するとプロジェクトファイル（.csproj）には

[code]

    <ItemGroup>
      <COMReference Include="MSHTML">
        <Guid>{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}</Guid>
        <VersionMajor>4</VersionMajor>
        <VersionMinor>0</VersionMinor>
        <Lcid>0</Lcid>
        <WrapperTool>primary</WrapperTool>
        <Isolated>False</Isolated>
        <EmbedInteropTypes>True</EmbedInteropTypes>
      </COMReference>
    </ItemGroup>
    
[/code]

という設定が追加されます。`{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}`とは`Microsoft HTML Object
Library`のタイプライブラリのID（LIBID）です。  
レジストリエディタで`HKEY_CLASSES_ROOT\TypeLib\{3050F1C5-98B5-11CF-
BB82-00AA00BDCE0B}\4.0`を参照すると

  * Microsoft HTML Object Library
  * Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

が登録されていることが確認できます。


CC BY-SA 4.0
2019-08-15T23:13:00.667
57382
2019-08-15T23:13:00.667
4236
57379
answer