Vra

'n ruk gelede, het ek 'n paar Woord interop voorbeelde in Visual Studio beta 1, en hy draai die verwysing na Microsoft.Office.Interop.Word word ingesluit (stel die "Gedagte Interop Tipes" = true in die verwysing eienskappe). Hierdie werk goed, en ek het hulle nie hardloop vir 'n rukkie ... tot vandag toe.

Natuurlik, nou is ek hardloop onder beta 2 van beide Visual Studio 2010 en NET 4.0 -. En dit lyk 'n bietjie gebreek te wees

Hier is die kode in vraag (net dummy voorbeeld kode):

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();
    }
}

Hier is die uitsondering Ek kry die meeste van die tyd, wanneer "Gedagte Interop Tipes" is ingestel op "ware" of ek 'n skakel met "/ l" op die command line:

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

Baie soms, dit werk -. Wat is selfs meer bisarre

As ek stel "Gedagte Interop Tipes" na "vals" (of gebruik / r op die command line in plaas van / l) dit alles werk goed.

As ek verwyder die "sigbare = true" eiendom setter dit werk ook ... maar ek weet dat eiendom se daar ... dit is selfs voorgestel deur IntelliSense!

Hoewel ek nie volledig toets gedoen op verskeie bokse, I kan bevestig dat my netbook (Windows 7 in plaas van Vista, maar nog NET 4.0 beta 2) sien dieselfde probleem.

Enige voorstelle oor of dit nou my dis gebreek of NET 4.0 beta 2?

Was dit nuttig?

Oplossing

Groot vangs! Dit lyk soos 'n fout in ons kodegenerasie vir geïndekseer eienskappe (nie 'n bekende een, so dankie vir die teken van hierdie!) Ek het probeer om op die jongste interne bou van VS 2010 en dit reproduseer sowel.

Wat gebeur is dat as jy 'n voorwerp inisialiseerder gebruik, dan is die volgende kode gegenereer word:

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

Maar as jy Sigbare = true in 'n aparte verklaring (sonder die voorwerp inisialiseerder) stel, dan is die volgende kode vrygestel:

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

Die PIA definieer net die onderste een, dus is dit nie wanneer jy met behulp van 'n voorwerp inisialiseerder. Die oplossing vir nou sigbaar te stel in 'n aparte verklaring wat fyn moet werk.

Ek het 'n fout oor hierdie geteken. Nogmaals dankie!

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top