2

我目睹了 mshtml 和 CLS 合规性的一些奇怪行为。

我有一个标记为 CLSCompliant(true) 的程序集。此程序集不会公开来自 mshtml 的任何类型。

我可以很容易地使代码符合 CLS,但有几件事似乎破坏了它:

  1. 引入“使用 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