如何使用.NET8正确创建COM类?

问题描述 投票:0回答:1

我需要在 .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>
c# com-interop .net-8.0
1个回答
0
投票
  1. <EnableComHosting>true</EnableComHosting>
    属性添加到 csproj 中的
    <PropertyGroup>
    中。这将告诉
    dotnet
    生成
    *.comhost.dll
  2. TestBed
    类设为
    internal
    而不是
    public
    。这将解决构建问题(我不知道为什么,但从一般角度来看,除了生成的工厂之外,不应该以任何方式在程序集外部访问实现(
    TestBed
    类)。
© www.soinside.com 2019 - 2024. All rights reserved.