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

时间:2009-12-01 13:41:28

标签: com interop .net-4.0 c#-4.0 .net-4.0-beta-2

不久前,我在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();
    }
}

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

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

偶尔会有效 - 这更奇怪。

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

如果我删除了“Visible = true”属性设置器,它也能正常工作......但我知道那个属性就在那里......它甚至被IntelliSense建议了!

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

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

1 个答案:

答案 0 :(得分:18)

很棒!这看起来像我们的索引属性代码生成中的一个错误(不是已知的属性,所以感谢报告这个!)我已经尝试了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,它应该可以正常工作。

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