Pergunta

A técnica para adicionar uma referência para a interoperabilidade COM do Office no Visual Studio é ir para:

  1. As referências
  2. Add Reference
  3. Selecione o COM
  4. Selecione Microsoft Office 11.0 Object Library

e magicamente nomeados aparece de referência:

Microsoft.Office.Core

Os autos Project.csproj os detalhes sobre a referência:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

E o projeto é verificado no controle de origem e está tudo bem.


Em seguida, um desenvolvedor com Office 2007 recebe o projeto de controle de origem, e não pode construí-lo porque tal referência não existe.

Ele (ou seja, eu) verifica o arquivo .csproj, suprime a referência à

Microsoft Office 11.0 Object Library

e re-adiciona a referência COM como

Microsoft Office 12.0 Object Library

e magicamente uma nomeados aparece de referência:

Microsoft.Office.Core

Os autos Project.csproj os detalhes sobre a referência:

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>4</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

E o projeto é verificado no controle de origem e está tudo bem.


Em seguida, um desenvolvedor com Office 2003 recebe o projeto de controle de origem, e não pode construí-lo porque tal referência não existe.

Ele (isto é, não eu) verifica o arquivo .csproj, suprime a referência à

Microsoft Office 12.0 Object Library

e re-adiciona a referência COM como

Microsoft Office 11.0 Object Library

e magicamente uma nomeados aparece de referência:

Microsoft.Office.Core

Os autos Project.csproj os detalhes sobre a referência:

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>3</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

E o projeto é verificado no controle de origem e está tudo bem.

Em seguida, o projeto é construído, pressionado para CDs , e enviada para os clientes que têm Office 2007 .

E nem tudo está bem.


Nos tempos antigos (ou seja, antes de .NET dll inferno), gostaríamos de fazer referência a objetos do escritório usando um versão independente ProgID , ou seja .:

"Excel.Application"

que resolve para um clsid do Office instalado, por exemplo.

{00024500-0000-0000-C000-000000000046}    

de que uma classe é então construído usando uma chamada para COM (pseudo-código de idioma de netural):

public IUnknown CreateOleObject(string className)
{
    IUnknown unk;

    Clsid classID = ProgIDToClassID(className);
    CoCreateInstance(classID, null, 
          CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, 
          IUnknown, out unk);

    return unk;
}

Perguntas

1) Qual é a técnica aprovado para automatizar as aplicações do Office instalados?

2) Quais são os Escritório 2003 Interop assembléias primárias útil para?

3) Se eu usar o Office 2003 Primary Interop Assemblies, eu tenho que ter o Office 2003 instalado?

4) Se eu construir com o Office 2003 Primary Interop Assemblies, são meus clientes vinculados ao Office 20003 para sempre?

5) Existe algum Office 2007 Interop assembléias primárias ?

6) Se eu instalar os Primary Interop Assemblies Office 2007 eu tenho que ter o Office 2007 instalado?

7) O que é errado com o uso de interoperabilidade COM padrão para conduzir Excel, Word ou Outlook? por exemplo:.

[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}

8) O que é um alcançar quando se adiciona um

  • Referência para itens no COM ,
  • em vez de usar [ComImport],
  • em vez de usar o Office 2007 Primary Interop Assemblies ?

9) é a adição de uma referência usando a guia COM idêntico ao usando interoperabilidade , exceto que ele precisa de um biblioteca de tipos antes que você possa vê-lo?

10) são do Office 2003 Primary Interop Assemblies frente e para trás compatível com: - Office 14 - Gabinete 2007 - Office 2003 - Office XP - Office 2000 - Office 97 - Office 95

Se um cliente, e um desenvolvedor, instala uma nova versão do Office, será que ainda funciona?

11) Nós temos que enviar os Office 2003 Primary Interop Assemblies com a nossa candidatura?

12) Será que o cliente tem de instalar Office 2003 Interop assembléias primárias antes de poderem utilizar a nossa aplicação?

13) Se um cliente instala os Office 2003 Interop assembléias primárias que eles têm de ter Office instalado?

14) Se um cliente instala os Office 2003 Interop assembléias primárias que eles têm que ter o Office 2003 instalado?

15) são o Office 2003 Primary Interop reúne um livre, lite, versão redistribuível do Office 2003?

16) Se a minha máquina de desenvolvimento tem Office 2007, eu posso usar os PIAs do Office 2003, e enviar para um cliente com o Office XP instalado?

Foi útil?

Solução 2

A resposta é "Copy Local" whatever montagem dll você pode obter o interoperabilidade. Depois de ter a dll montagem em sua pasta de saída, adicione uma referência a ele, e verificá-lo no controle de origem.

Agora, todo mundo tem a referência assembly dll.

Outras dicas

Wow que é um grande número de perguntas. Eu acho que, em geral, se o seu aplicativo está usando os PIAs então você está assumindo que seu público-alvo tem alguma versão do Office instalado. Os PIAs serão instalados no GAC quando o usuário-alvo instala Office. Se eles não têm o Office instalado, então por que você está alvejando Office?

Sim, as DLLs de escritório são a maneira correta para automatizar Office. Há uma lista das assembleias aqui , incluindo alguns para o Office 2007.

Você usar VSTO (ferramentas do Visual Studio para o Office)?

http://msdn.microsoft.com/en-us/office /aa905533.aspx

Uma discussão antiga e, provavelmente, a maioria das pessoas ficaria feliz com CopyLocal = True, no entanto, aqui está uma outra maneira .. Use ambos (ou mais ..? Pensando Office 2010 se o problema ainda existe ..) referências em seus arquivos de projeto, e ignoram ou simplesmente dizer MSBuild ignorar o "MSB3284" aviso (Biblioteca não encontrado ). Portanto, incluir isso em seu arquivo csproj:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

Seguido por:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>4</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

Eu estaria interessado em ver se a Microsoft fornece uma biblioteca NuGet para isso - apenas para obter todos para a mesma abordagem. Eu acho que removeria a necessidade das pessoas a pesquisar na web para essas respostas ... Eu acredito que isso seria contra a licença do Microsoft Office para que eles são os únicos a fornecê-lo.

BTW com cópia local você tem que ter cuidado para não redistribuir estes biblioteca por engano.

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