我正在尝试使用互操作程序集将最近发布的 .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>
Run Code Online (Sandbox Code Playgroud)
和这个 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这失败了
<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>
Run Code Online (Sandbox Code Playgroud)
当我将包添加到项目时,我得到了这个
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
暗示“兼容”但不是“完全兼容”
有没有办法做到这一点,或者我必须使用 .NET Framework 而不是 Core?
我使用的是 Windows 10、.NET core 3.0.100 和 MS Office 365(Word 版本为 16.0.11929.20298)
Dri*_*nen 31
我遇到过同样的问题。我通过打开参考属性并将“复制本地”和“嵌入互操作类型”都设置为“是”来修复它。
更新:这实际上与将这两行添加到 .csproj 文件中的 COM 引用相同。
<COMReference Include="Microsoft.Office.Core">
...
<EmbedInteropTypes>True</EmbedInteropTypes>
<Private>true</Private>
</COMReference>
Run Code Online (Sandbox Code Playgroud)
接受的答案中没有提到“私人”标签,但它可以防止很多问题。
sil*_*ire 23
对此的解决方案有点古怪,但可能。
创建一个新的 .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>
Run Code Online (Sandbox Code Playgroud)
不要使用 NuGet 包,它们与 .NET Core 不兼容。
更新:
您现在可以直接从 IDE 添加 COM 引用(自 Visual Studio 2019 v16.6 起):
小智 14
只需删除对 Interop 包的 Nuget 引用并从引用管理器中添加 Microsoft Excel 即可。

| 归档时间: |
|
| 查看次数: |
26604 次 |
| 最近记录: |