【发布时间】:2020-01-27 12:54:42
【问题描述】:
我正在尝试通过互操作程序集将最近发布的 .NET 核心与 MS Office 一起使用
我有一个最小的项目文件
<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
暗示“兼容”但不“完全兼容”
有没有办法做到这一点,或者我必须使用 .NET Framework 而不是 Core?
我使用的是 Windows 10、.NET core 3.0.100 和 MS Office 365(Word 版本为 16.0.11929.20298)
【问题讨论】:
-
每次尝试使用 .NET Core 中的 .NET Old 程序集时都会收到该警告。这并不意味着互操作程序集不起作用。您是否尝试过使用您的应用程序?
-
在任何情况下,您都不需要 互操作程序集来使用 COM。您可以使用
dynamic excel = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application", true));的后期绑定打开 Excel 并开始使用您返回的 Application 对象 - 无需类型支持。互操作程序集通过提供 CLSID 和强类型代理对象让生活变得更轻松,否则您必须自己创建。 -
我已经尝试使用我的应用程序,我得到了上面提到的
FileNotFoundException -
@PeterHull 测试 Silkfire 的答案 first - 使用自动生成的代理对象创建 COM 引用。它们不会像互操作程序集那样好(例如,某些参数可能是整数而不是枚举)但它们肯定比
dynamic