mshtml と CLS 準拠で奇妙な動作が見られます。
CLSCompliant(true) とマークされたアセンブリがあります。このアセンブリは、mshtml の型を公に公開しません。
コードを CLS にかなり簡単に準拠させることができますが、いくつかのことがそれを妨げているようです:
"using 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 の警告が発生します。
ありがとう。