我正在目睹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合规性时,会针对以下划线或类似的CLS违规开头的mshtml命名空间中的每种类型引发167条警告。
感谢。