Estoy tratando de usar el núcleo .NET lanzado recientemente con MS Office usando los ensamblajes de interoperabilidad
Tengo un archivo de proyecto mínimo
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Office.Interop.Word"> <Version>15.0.4797.1003</Version> </PackageReference> </ItemGroup> </Project>
y este programa C#
using System; using Microsoft.Office.Interop.Word; namespace ii { class Program { static void Main(string[] args) { var app = new Application(); Console.WriteLine(app.Version); app.Quit(); } } }
Desafortunadamente esto falla con
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. The system cannot find the file specified. File name: 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
Cuando agregué el paquete al proyecto obtuve esto
warn : Package 'Microsoft.Office.Interop.Word 15.0.4797.1003' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework '.NETCoreApp,Version=v3.0'. This package may not be fully compatible with your project. info : Package 'Microsoft.Office.Interop.Word' is compatible with all the specified frameworks in project
lo que implica 'compatible' pero no 'totalmente compatible'
¿Hay alguna manera de hacer esto o debo usar .NET Framework en lugar de Core?
Estoy usando Windows 10, .NET core 3.0.100 y MS Office 365 (Word es la versión 16.0.11929.20298)
Mención de pasos para migrar cualquier interoperabilidad o dll que no sea compatible con .net core
El paquete Nuget no funcionará. Consulte las capturas de pantalla.
¡Feliz codificación! Gracias
Simplemente elimine la referencia de Nuget al paquete Interop y agregue Microsoft Excel desde Reference Manager.
Los ensamblajes de interoperabilidad no son compatibles con .NET Core. Tienes que usar el marco completo.
Consulte también este problema de GitHub
Si desea crear documentos de Office mediante programación, es posible que desee echar un vistazo a Office OpenXML SDK .
La solución a esto es un poco peculiar, pero posible.
Cree un nuevo proyecto de .NET Framework 4.X. Agregue las referencias COM relevantes al proyecto. Edite el .csproj
de su proyecto .NET Core 3.0 y agregue las referencias generadas desde el proyecto .NET Framework a la etiqueta <ItemGroup>
.
Debería verse algo similar a:
<ItemGroup> <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>8</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> <EmbedInteropTypes>True</EmbedInteropTypes> </COMReference> ... more references </ItemGroup>
No use los paquetes NuGet, no son compatibles con .NET Core.
Actualizar:
Ahora puede agregar las referencias COM directamente desde el IDE (desde Visual Studio 2019 v16.6):
Tuve el mismo problema. Lo arreglé abriendo las propiedades de referencia y configurando "Copiar local" e "Incrustar tipos de interoperabilidad" en "Sí".
Actualización: esto en realidad hace lo mismo que agregar estas 2 líneas a la referencia COM en el archivo .csproj.
<COMReference Include="Microsoft.Office.Core"> ... <EmbedInteropTypes>True</EmbedInteropTypes> <Private>true</Private> </COMReference>
La etiqueta "Privado" no se menciona en las respuestas aceptadas, pero evita muchos problemas.