Pergunta

Um tempo atrás, eu escrevi alguma palavra interoperabilidade exemplos em Visual Studio 1 beta, e definir a referência para Microsoft.Office.Interop.Word para ser incorporado (definir os "Tipos Embed Interop" = true nas propriedades de referência). Estes funcionou bem, e eu não executá-los por um tempo ... até hoje.

Claro, agora eu estou correndo sob beta 2 de ambos Visual Studio 2010 e .NET 4.0 -. E parece ser um pouco quebrado

Aqui está o código em questão (apenas manequim código de exemplo):

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

Aqui é a exceção recebo mais do tempo, quando "Embed Interop Types" é definido como "true" ou eu ligar com "/ l" na linha de comando:

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

Muito ocasionalmente, ele funciona -. Que é ainda mais bizarro

Se eu definir "Tipos Embed Interop" para "false" (ou use / r na linha em vez de / l de comando) tudo funciona bem.

Se eu remover a propriedade "Visible = true" setter funciona também ... mas eu sei que está lá propriedade ... é mesmo sugerido por IntelliSense!

Embora eu não tenha feito testes exaustivos em várias caixas, I pode confirmam que o meu netbook (com o Windows 7 em vez do Vista, mas ainda .NET 4.0 beta 2) vê o mesmo problema.

Todas as sugestões quanto ao facto de que sou eu quem está quebrado ou .NET 4.0 beta 2?

Foi útil?

Solução

Great captura! Isto parece um bug na nossa geração de código para propriedades indexadas (não é um conhecido um, por isso obrigado por reportar este!) Eu tentei sobre a compilação mais recente interno do VS 2010 e se reproduz também.

O que acontece é que se você usar um inicializador de objeto, em seguida, o seguinte código é gerado:

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

No entanto, se você definir visível = true em um comunicado separado (sem a inicialização do objeto), em seguida, o seguinte código é emitido:

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

O PIA só define a inferior, portanto, não quando você está usando um inicializador de objeto. A solução alternativa para agora é definir visível em um comunicado separado, que deve funcionar bem.

Eu tenho registrado um bug sobre isso. Obrigado mais uma vez!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top