PIA嵌入是否在.NET 4.0 beta 2中被破坏?

Jon*_*eet 27 com interop .net-4.0 .net-4.0-beta-2 c#-4.0

不久前,我在Visual Studio beta 1中编写了一些Word互操作示例,并将引用设置Microsoft.Office.Interop.Word为嵌入(在引用属性中设置"嵌入互操作类型"= true).这些工作正常,我暂时没有运行它们......直到今天.

当然,现在我在Visual Studio 2010和.NET 4.0的beta 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我大多数情况下的例外情况,当"嵌入互操作类型"设置为"true"或我在命令行上使用"/ l"链接时:

System.MissingMethodException: Method not found:
'Void Microsoft.Office.Interop.Word._Application.set_Visible(Boolean)'.
   at WordImprovement1.Main()
Run Code Online (Sandbox Code Playgroud)

偶尔,它有效 - 这更奇怪.

如果我将"嵌入互操作类型"设置为"假"(或在命令行上使用/ r而不是/ l)它一切正常.

如果我删除"Visible = true"属性setter它也可以工作......但是我知道那里的属性......它甚至被IntelliSense建议!

虽然我还没有对多个盒子进行详尽的测试,但我可以确认我的上网本(运行Windows 7而不是Vista,但仍然是.NET 4.0 beta 2)看到了同样的问题.

是关于我是破碎还是.NET 4.0 beta 2的任何建议?

Kir*_*kov 18

很棒!这看起来像我们的索引属性代码生成中的一个错误(不是已知的属性,所以感谢报告这个!)我已经尝试了VS 2010的最新内部版本,它也会重现.

如果您使用对象初始值设定项,则会生成以下代码:

Application <>g__initLocal19 = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
<>g__initLocal19.set_Visible(true);
Run Code Online (Sandbox Code Playgroud)

但是,如果在单独的语句中设置Visible = true(没有对象初始值设定项),则会发出以下代码:

Application application = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
application.Visible = true;
Run Code Online (Sandbox Code Playgroud)

PIA仅定义底部,因此当您使用对象初始化程序时它会失败.现在的解决方法是在一个单独的语句中设置Visible,该语句应该可以正常工作.

我已经记录了一个关于此的错误.再次感谢!

  • 基里尔,你刚回答了一个神?我向你致敬. (6认同)