.NET Core 3.0 및 MS Office Interop
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)를 사용하고 있습니다.
답변
이에 대한 해결책은 약간 기발하지만 가능합니다.
새 .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부터).
나는 같은 문제가 있었다. 참조 속성을 열고 "Copy Local"및 "Embed Interop Types"를 "Yes"로 설정하여 문제를 해결했습니다.
업데이트 : 실제로이 두 줄을 .csproj 파일의 COM 참조에 추가하는 것과 동일한 작업을 수행합니다.
<COMReference Include="Microsoft.Office.Core">
...
<EmbedInteropTypes>True</EmbedInteropTypes>
<Private>true</Private>
</COMReference>
수락 된 답변에 "Private"태그가 언급되어 있지 않지만 많은 문제를 방지합니다.
Interop 어셈블리는 .NET Core와 호환되지 않습니다. 전체 프레임 워크를 사용해야합니다.
이 GitHub 문제 도 참조하십시오.
프로그래밍 방식으로 Office 문서를 작성하려는 경우 Office OpenXML SDK를 살펴볼 수 있습니다 .