title author date CreateTime categories
dotnet core 导出 COM 组件
lindexi
2019-09-22 20:25:38 +0800
2019-09-22 20:13:16 +0800
dotnet

在 dotnet core 3.0 支持将库导出为COM组件,本文告诉大家如何将代码导出为 COM 组件

在导出 COM 组件的库,需要一个 GUID 声明这个 COM 接口

例如创建一个项目,在这个项目添加一个接口,通过以下方法标记为 COM 组件

这里的 Guid 是我自己设置的,可以在 VisualStudio 工具里面找到 GUID 创建选项,创建一个随机的 GUID 字符串

    [ComVisible(true)]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IFoo
{
/// <summary>
/// 有趣方法
/// </summary>
/// <returns></returns>
string Foo();
}

上面代码就定义了一个接口,在相同的项目还需要写一个类实现这个接口

    [ComVisible(true)]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
public class Foo : IFoo
{
/// <inheritdoc />
string IFoo.Foo()
{
return "林德熙是逗比";
}
}

编辑这个项目的 csproj 添加属性 EnableComHosting 这样编译的时候才会生成可以导出为COM的文件

  <PropertyGroup>
<EnableComHosting>true</EnableComHosting>
</PropertyGroup>

现在看起来的项目文件如下

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup> <PropertyGroup>
<EnableComHosting>true</EnableComHosting>
</PropertyGroup>
</Project>

现在尝试编译这个项目,可以在输出路径里面找到 项目名.comhost.dll 文件,如创建的项目是 BearqalkeawaiKaleenemcemfo 那么在输出文件夹可以找到这个文件

BearqalkeawaiKaleenemcemfo.comhost.dll

使用管理员运行命令行,输入下面代码注册 COM 文件

regsvr32 项目名.comhost.dll

尝试创建一个新项目引用这个COM组件,使用的方法是定义一个接口

    [ComImport]
[CoClass(typeof(Foo))]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
public interface IFoo
{
/// <summary>
/// 有趣方法
/// </summary>
/// <returns></returns>
string Foo();
} [ComImport]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
internal class Foo
{
}

这里定义的方法和其他使用COM的方法相同

        static void Main(string[] args)
{
var foo = new IFoo();
Console.WriteLine(foo.Foo());
}

创建接口就可以使用方法

Exposing .NET Core Components to COM | Microsoft Docs

源代码请看 github官方源代码

2019-9-22-dotnet-core-导出-COM-组件的更多相关文章

  1. dotnet core 实践——日志组件Serilog

     前几天把基于quartz.net的部分项目代码移植到了dotnet core ,但是没增加日志功能,原因是没找到合适的组件. 今天终于找到了Serilog: https://github.com/s ...

  2. dotnet core各rpc组件的性能测试

    一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互.本文针对了dotnet core平台 ...

  3. dotnet core使用开源组件FastHttpApi进行web应用开发(转)

      FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi). ...

  4. dotnet core使用开源组件FastHttpApi进行web应用开发

    FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi).在这 ...

  5. dotnet core高吞吐Http api服务组件FastHttpApi

    简介 是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服 ...

  6. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  7. DotNet Core 介绍

    前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...

  8. .Net Core开源通讯组件 SmartRoute(服务即集群)

    SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群.SmartRoute是通过消息订阅的机制实现 ...

  9. 解决VS2015无法调试dotnet core项目

    dotnet core 1.0正式版和VS2015 update3安装后一直无法在VS中正常调试. 错误提示:The debugger's worker process (msvsmon.exe) u ...

  10. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

随机推荐

  1. 【JZOJ3885】【长郡NOIP2014模拟10.22】搞笑的代码

    ok 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...

  2. 【AtCoder Regular Contest 092】C.2D Plane 2N Points【匈牙利算法】

    C.2D Plane 2N Points 题意:给定N个红点二维坐标N个蓝点二维坐标,如果红点横纵坐标都比蓝点小,那么它们能够构成一组.问最多能构成多少组. 题解:把满足要求的红蓝点连线,然后就是匈牙 ...

  3. 最短路-Dijkstra算法整理

    维基说的很全面:https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm 理解: 先设置访问数组vis[]和距离数组dist[],开始时把源点(sour ...

  4. spring boot 2.X上传文件限制大小

    Spring Boot 1.3.x multipart.maxFileSize multipart.maxRequestSize Spring Boot 1.4.x and 1.5.x spring. ...

  5. [linux]vmware中linux虚拟机扩容 标签: vmware虚拟机linux 2016-09-05 08:03 315人阅读 评

    扩容原因 现阶段,虚拟机的标配都是1G内存和20G硬盘,大部分时候是够用的,但是也会出现虚拟机里面东西放多了硬盘不够用的情况,这种情况下,除了清理垃圾,另外就只能给虚拟机扩容了.因为window扩容相 ...

  6. redis :read error on connection

    最近做了一个多人竞拍的小功能  因为以前没做过 所以踩了很多坑用的是 mysql + php + redis 实现的竞拍功能 这里先说一下踩得第二个坑redis  的原因  真是欲哭无泪  解决完一个 ...

  7. LeetCode108 Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. (M ...

  8. TreeSet之用外部比较器实现自定义有序(重要)

    Student.java package com.sxt.set5; public class Student{ private String name; private int age; priva ...

  9. 中断源记录 INT0 INT1

    中断源记录 INT0 INT1 用到一个单片机 使用的 P3.1 P3.3 作为唤醒口,后来发一 P3.1 和 P3.3 使用的同一个中断 INT1,这个尴尬了,只能两选 一. 查看规格书,还好 P3 ...

  10. JavaScript 开发者都应该知道的十个概念

    1. 原始值和引用值(Value vs. Reference) 理解对象.数组和函数是如何复制和传递到函数中的.了解引用值是被复制了什么,理解原始值是通过复制值来进行复制和传递的. 简析:ECMASc ...