Frage

Vor einiger Zeit schrieb ich einige Word-Interop-Beispiele in Visual Studio Beta 1, und legen Sie den Verweis auf Microsoft.Office.Interop.Word eingebettet werden (die „Embed Interop-Typen“ = true in der Referenz Eigenschaften). Diese funktionierte gut, und ich habe sie nicht für eine Weile laufen ... bis heute.

Natürlich, jetzt ich laufe unter Beta 2 von Visual Studio 2010 und .NET 4.0 -. Und es scheint etwas gebrochen zu sein

Hier ist der Code in Frage (nur Dummy-Beispiel-Code):

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 ist die Ausnahme, die ich bekommen die meisten von der Zeit, als „Embed Interop-Typen“ auf „true“ oder ich einen Link mit „/ l“ auf der Kommandozeile:

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

Sehr selten, es funktioniert -., Die noch bizarrer ist

Wenn ich auf „Embed Interop-Typen“ auf „false“ (oder verwenden Sie / r auf der Kommandozeile statt / l) alles funktioniert gut.

Wenn ich die "Visible = true" Eigenschaft Setter entferne es auch funktioniert ... aber ich weiß , die Unterkunft dort ... es ist sogar von IntelliSense vorgeschlagen!

Während ich keinen Anspruch auf Vollständigkeit Tests auf mehreren Boxen getan haben, I können bestätigen, dass mein Netbook (mit Windows 7 statt Vista, aber immer noch .NET 4.0 Beta 2) sieht das gleiche Problem.

Irgendwelche Vorschläge, ob es mir, dass die gebrochene oder .NET 4.0 Beta 2?

War es hilfreich?

Lösung

Großer Fang! Dies sieht aus wie ein Fehler in unserem Code-Generierung für indizierte Eigenschaften (kein bekanntes, also danke für diese Berichterstattung!) Ich habe auf den neuesten internen Build von VS versuchte 2010 und reproduziert sie als gut.

Was passiert, ist, dass, wenn Sie ein Objekt initializer verwenden, dann wird der folgende Code generiert:

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

Wenn Sie jedoch Visible = true in einer gesonderten Erklärung gesetzt (ohne Objektinitialisierer), dann wird der folgende Code wird ausgegeben:

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

Der PIA definiert nur die unteren, daher scheitert es, wenn Sie ein Objekt initializer verwenden. Die Abhilfe für jetzt ist sichtbar in einer gesonderten Erklärung festlegen, welche fein sollte funktionieren.

Ich habe einen Fehler darüber protokolliert. Nochmals vielen Dank!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top