我目睹了 mshtml 和 CLS 合规性的一些奇怪行为。
我有一个标记为 CLSCompliant(true) 的程序集。此程序集不会公开来自 mshtml 的任何类型。
我可以很容易地使代码符合 CLS,但有几件事似乎破坏了它:
引入“使用 mshtml;” 语句而不是每次使用类型时手动引用命名空间。出于某种原因,这违反了 CLS 合规性。
如果我转换以下内容:
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 条警告。
谢谢。