.NET Core 3.0 및 MS Office Interop

Sep 27 2019

interop 어셈블리를 사용하여 MS Office에서 최근에 출시 된 .NET 코어를 사용하려고합니다.

최소한의 프로젝트 파일이 있습니다.

<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>

그리고이 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();
        }
    }
}

불행히도 이것은 실패합니다

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'

프로젝트에 패키지를 추가했을 때

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 

'호환'을 의미하지만 '완전히 호환'되지 않음

이 작업을 수행하는 방법이 있습니까 아니면 Core 대신 .NET Framework를 사용해야합니까?

Windows 10, .NET core 3.0.100 및 MS Office 365 (Word 버전 16.0.11929.20298)를 사용하고 있습니다.

답변

10 silkfire Sep 27 2019 at 08:34

이에 대한 해결책은 약간 기발하지만 가능합니다.

새 .NET Framework 4.X 프로젝트를 만듭니다. 프로젝트에 관련 COM 참조를 추가하십시오. .csproj.NET Core 3.0 프로젝트를 편집하고 .NET Framework 프로젝트에서 생성 된 참조를 <ItemGroup>태그에 추가합니다.

다음과 유사해야합니다.

<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>

NuGet 패키지를 사용하지 마십시오. .NET Core와 호환되지 않습니다.

최신 정보:

이제 IDE에서 직접 COM 참조를 추가 할 수 있습니다 (Visual Studio 2019 v16.6부터).

18 DriesGeenen Dec 02 2019 at 12:06

나는 같은 문제가 있었다. 참조 속성을 열고 "Copy Local"및 "Embed Interop Types"를 "Yes"로 설정하여 문제를 해결했습니다.

업데이트 : 실제로이 두 줄을 .csproj 파일의 COM 참조에 추가하는 것과 동일한 작업을 수행합니다.

<COMReference Include="Microsoft.Office.Core">
    ...
    <EmbedInteropTypes>True</EmbedInteropTypes>
    <Private>true</Private>
</COMReference>

수락 된 답변에 "Private"태그가 언급되어 있지 않지만 많은 문제를 방지합니다.

2 PeterSchneider Sep 27 2019 at 08:24

Interop 어셈블리는 .NET Core와 호환되지 않습니다. 전체 프레임 워크를 사용해야합니다.

GitHub 문제 도 참조하십시오.

프로그래밍 방식으로 Office 문서를 작성하려는 경우 Office OpenXML SDK를 살펴볼 수 있습니다 .