2

mshtml と CLS 準拠で奇妙な動作が見られます。

CLSCompliant(true) とマークされたアセンブリがあります。このアセンブリは、mshtml の型を公に公開しません。

コードを CLS にかなり簡単に準拠させることができますが、いくつかのことがそれを妨げているようです:

  1. "using mshtml;" の導入 型を使用するたびに名前空間を手動で参照する代わりに、ステートメントを使用します。何らかの理由で、これは CLS 準拠に違反します。

  2. 以下を変換すると:

        var doc = webBrowser.Document as mshtml.HTMLDocument;
    
        var scriptNode = doc.createElement("SCRIPT") as mshtml.IHTMLScriptElement;
    
        var nodes = doc.getElementsByTagName("head");
    
        foreach (var head in nodes)
        {
            var htmlHead = (mshtml.HTMLHeadElement)head;
            if (htmlHead != null)
                htmlHead.appendChild((mshtml.IHTMLDOMNode)scriptNode);
        }
    

    これに:

        foreach (var head in nodes.OfType<mshtml.IHTMLDOMNode>())
            head.appendChild((mshtml.IHTMLDOMNode)scriptNode);
    

    これも CLS 準拠に違反しているようです。

ここで何が起こっているのかについて、誰かが洞察を提供できますか? 私にとって、これが CLS コンプライアンスに違反することはありません。

PS 私が CLS 準拠に違反すると言うと、アンダースコアで始まる mshtml 名前空間の各タイプ、または同様の CLS 違反について 167 の警告が発生します。

ありがとう。

4

0 に答える 0