.NET 4.0 beta 2でPIA埋め込みは壊れていますか?
-
22-07-2019 - |
質問
しばらく前、私はVisual Studioベータ1でいくつかのWord相互運用例を作成し、 Microsoft.Office.Interop.Word
への参照を埋め込みに設定しました("埋め込み相互運用タイプ" =参照プロパティでtrue)。これらは正常に機能し、しばらく実行していませんでした...今日まで。
もちろん、今はVisual Studio 2010と.NET 4.0の両方のベータ2で実行していますが、多少壊れているようです。
問題のコードは次のとおりです(ダミーのサンプルコード):
using Microsoft.Office.Interop.Word;
class WordImprovement1
{
static void Main()
{
Application app = new Application { Visible = true };
app.Documents.Add();
Document doc = app.ActiveDocument;
Paragraph para = doc.Paragraphs.Add();
para.Range.Text = "Thank goodness for C# 4";
object filename = "demo.doc";
object format = WdSaveFormat.wdFormatDocument97;
doc.SaveAs(FileName: ref filename, FileFormat: ref format);
doc.Close();
app.Quit();
}
}
「相互運用型を埋め込む」とき、ほとんどの場合ほとんどの例外が発生します。が「true」に設定されているまたは、「/ l」とリンクします;コマンドラインで:
System.MissingMethodException: Method not found:
'Void Microsoft.Office.Interop.Word._Application.set_Visible(Boolean)'.
at WordImprovement1.Main()
非常に時折、動作します-これはさらに奇妙です。
「埋め込み相互運用タイプ」を設定した場合" false" (または、/ lの代わりにコマンドラインで/ rを使用します)すべて正常に動作します。
" Visible = true"を削除すると、プロパティセッターも機能します...しかし、プロパティがあることは知っています ...それはIntelliSenseによっても示唆されています!
複数のボックスで徹底的なテストを行っていませんが、ネットブック(VistaではなくWindows 7を実行していますが、.NET 4.0 beta 2でも実行)で同じ問題が発生することを確認できます。
自分が壊れているのか、それとも.NET 4.0 beta 2なのかについての提案はありますか?
解決
素晴らしいキャッチ!これは、インデックス付きプロパティのコード生成のバグのようです(既知のプロパティではないため、報告してくれてありがとう!)VS 2010の最新の内部ビルドを試してみましたが、同様に再現します。
オブジェクトイニシャライザを使用すると、次のコードが生成されます:
Application <>g__initLocal19 = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
<>g__initLocal19.set_Visible(true);
ただし、Visible = trueを別のステートメントで(オブジェクト初期化子なしで)設定すると、次のコードが出力されます。
Application application = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
application.Visible = true;
PIAは下部のもののみを定義するため、オブジェクト初期化子を使用している場合は失敗します。現時点での回避策は、Visibleを別のステートメントで設定することです。これは正常に機能するはずです。
これに関するバグを記録しました。どうもありがとう!