我需要在 .NET8 中创建一个可供 Excel 访问的 COM 类。
观看此视频后,我实现了以下测试床类:
namespace COMTestBedCS
{
[Guid("26a0aa6d-5aba-458f-92b4-b9a30ae0c65c")]
[GeneratedComInterface]
public partial interface ITestBed
{
int GetXPTO();
void SetXPTO(int value);
}
[Guid("3e178f98-522e-4e95-8a9c-6d80dc48b7d5")]
[GeneratedComClass]
public partial class TestBed : ITestBed
{
private int _XPTO = 1024;
public int GetXPTO() => _XPTO;
public void SetXPTO(int value)=>_XPTO = value;
}
}
项目编译正确,没有错误。但是,当我尝试在 Excel 中引用此测试床时,出现以下错误:
Can't add a reference to the specified file.
如果我尝试使用
regsvr32
,我会收到以下错误:
我做错了什么?
为了完整起见,这是项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
</Project>
<EnableComHosting>true</EnableComHosting>
属性添加到 csproj 中的 <PropertyGroup>
中。这将告诉 dotnet
生成 *.comhost.dll
。TestBed
类设为 internal
而不是 public
。这将解决构建问题(我不知道为什么,但从一般角度来看,除了生成的工厂之外,不应该以任何方式在程序集外部访问实现(TestBed
类)。