Question

Il y a quelque temps, j’ai écrit des exemples d’interopérabilité Word dans Visual Studio version 1 et ai défini la référence à Microsoft.Office.Interop.Word pour qu’elle soit incorporée (définissez les "types d’interopérabilité incorporés"). = true dans les propriétés de référence). Celles-ci ont bien fonctionné et je ne les ai pas exécutées depuis un moment ... jusqu'à aujourd'hui.

Bien sûr, je travaille maintenant sous la version bêta 2 de Visual Studio 2010 et .NET 4.0 - et cela semble quelque peu endommagé.

Voici le code en question (exemple factice):

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

Voici l'exception: plus du temps, quand je & nbsp; " Types d'interopérables incorporés " est défini sur " true " ou je lie avec " / l " sur la ligne de commande:

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

Très rarement, cela fonctionne - ce qui est encore plus bizarre.

Si je définis "Types d'interopérabilité intégrés" to " false " (ou utilisez / r sur la ligne de commande au lieu de / l) tout fonctionne correctement.

Si je supprime le " Visible = true " propriété setter ça marche aussi ... mais je sais que la propriété est là ... elle est même suggérée par IntelliSense!

Bien que je n’aie pas fait de tests exhaustifs sur plusieurs boîtes, je peux confirmer que mon netbook (fonctionnant sous Windows 7 au lieu de Vista, mais toujours .NET 4.0 beta 2) voit le même problème.

Avez-vous des suggestions quant à savoir si c'est moi qui est en panne ou bien .NET 4.0 beta 2?

Était-ce utile?

La solution

Bonne prise! Cela ressemble à un bogue dans notre génération de code pour les propriétés indexées (inconnu, merci de nous l'avoir signalé!). J'ai essayé la dernière version interne de VS 2010 et elle est également reproduite.

Qu'est-ce qui se passe est que si vous utilisez un initialiseur d'objet, le code suivant est généré:

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

Toutefois, si vous définissez Visible = true dans une instruction distincte (sans l'initialiseur d'objet), le code suivant est émis:

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

La PIA ne définit que la dernière, par conséquent, elle échoue lorsque vous utilisez un initialiseur d'objet. La solution de rechange consiste à définir Visible dans une instruction distincte qui devrait fonctionner correctement.

J'ai enregistré un bogue à ce sujet. Merci encore!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top