无法引用 C# COM 库
C# COM library cannot be referenced
按照 Turn a simple C# DLL into a COM interop component 的指导方针,我创建了一个小型 C# COM 服务器:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("410B8E64-27DB-40BD-8847-FC3A0E96147D")]
public interface IFactory
{
int PlusOne(int i);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("207FC3AB-0EFB-459A-B222-41E281F044F9")]
public class Factory : IFactory
{
public int PlusOne(int i) => i + 1;
}
我还创建了一个仅引用此 COM 服务器的客户端 C# 项目。问题是:COM 引用不起作用,在 Dependencies->COM 部分它标有黄色警告三角形,没有任何进一步的解释,并且 COM 组件的类型在客户端代码中不可用。
这些projects are published on github。
请注意,COM 服务器会在项目重建时自动注册(regasm)。
我将不胜感激任何帮助。诸如“您可以直接将服务器作为 .net 程序集引用而无需使用 COM”之类的答案是不可接受的,因为这只是对我们需要建立的更大工作流的一部分的测试。
在检查编译器警告后找到了非活动引用的原因,它明确禁止.Net 客户端引用.Net COM 服务器。
但是,存在这种可能性,如下所述:
https://docs.microsoft.com/en-us/samples/dotnet/samples/out-of-process-com-server/
我已经检查过了,这确实工作正常,.Net 客户端可以从示例中引用 Server.Contract.tlb。
作为奖励,Microsoft 添加了将 .Net Core 目标 COM 服务器加载到 COM Surrogate 或 运行 作为进程外(独立 exe)的可能性。
这确实只适用于 netcoreapp3.1 服务器,因为当我将目标框架更改为 net48 时,没有像 netcoreapp3.1 那样自动生成 DllServer.comhost.dll(很可能包含 proxy/stub 代码),项目 属性 true 显然没有任何效果。
按照 Turn a simple C# DLL into a COM interop component 的指导方针,我创建了一个小型 C# COM 服务器:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("410B8E64-27DB-40BD-8847-FC3A0E96147D")]
public interface IFactory
{
int PlusOne(int i);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("207FC3AB-0EFB-459A-B222-41E281F044F9")]
public class Factory : IFactory
{
public int PlusOne(int i) => i + 1;
}
我还创建了一个仅引用此 COM 服务器的客户端 C# 项目。问题是:COM 引用不起作用,在 Dependencies->COM 部分它标有黄色警告三角形,没有任何进一步的解释,并且 COM 组件的类型在客户端代码中不可用。 这些projects are published on github。 请注意,COM 服务器会在项目重建时自动注册(regasm)。 我将不胜感激任何帮助。诸如“您可以直接将服务器作为 .net 程序集引用而无需使用 COM”之类的答案是不可接受的,因为这只是对我们需要建立的更大工作流的一部分的测试。
在检查编译器警告后找到了非活动引用的原因,它明确禁止.Net 客户端引用.Net COM 服务器。 但是,存在这种可能性,如下所述: https://docs.microsoft.com/en-us/samples/dotnet/samples/out-of-process-com-server/
我已经检查过了,这确实工作正常,.Net 客户端可以从示例中引用 Server.Contract.tlb。
作为奖励,Microsoft 添加了将 .Net Core 目标 COM 服务器加载到 COM Surrogate 或 运行 作为进程外(独立 exe)的可能性。
这确实只适用于 netcoreapp3.1 服务器,因为当我将目标框架更改为 net48 时,没有像 netcoreapp3.1 那样自动生成 DllServer.comhost.dll(很可能包含 proxy/stub 代码),项目 属性