C# 创建并注册COM服务器对象.NET

C# 创建并注册COM服务器对象.NET,c#,com,C#,Com,我一直在遵循一组教程()来创建一个简单的COM服务器对象 假设我有一个简单的你好世界: [ComVisible(true)] [Guid("392930B3-9CD0-4247-8C69-83168D1C8F77")] [ClassInterface(ClassInterfaceType.None)] [ProgId("nathanr.HellowWorldCom")] class HelloWorldCom : IHelloWorldCom { public int HelloWorl

我一直在遵循一组教程()来创建一个简单的COM服务器对象

假设我有一个简单的你好世界:

[ComVisible(true)]
[Guid("392930B3-9CD0-4247-8C69-83168D1C8F77")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("nathanr.HellowWorldCom")]
class HelloWorldCom : IHelloWorldCom
{
    public int HelloWorld()
    {
        Console.WriteLine("Hello World!");
        return 1;
    }
}
使用同样简单的界面:

[ComVisible(true)]
[Guid("C08205BE-1393-4070-AE57-FA47F0D653C3")]
interface IHelloWorldCom
{
    [DispId(1)]
    int HelloWorld();
}
当然,不能忘记
AssemblyInfo.cs
文件:

...
[assembly: ComVisible(true)]
[assembly: AssemblyKeyFile("HelloWorldCOM.snk")]
...
问题是,当我构建
HelloWorldCom.dll
并尝试注册它时,
regasm
只是向我伸出舌头:

RegAsm : warning RA00000 : No types were registered.
为了弥补我的不足,我打开了
Regedit
,搜索了
ProgID
。它不在那里,老实说,这并不奇怪

我是否遗漏了一些明显的东西?


整个测试项目是一个更大的(实际有用的)设置的一部分,该设置也没有注册。

这将是一个很长的答案:addpublic


可能存在两个问题:

  • 您选择的.net framework不正确。在我的例子中,我试图用2.0框架注册dll,而不是64位4.0框架

  • 您的DLL未公开

  • 希望这能解决你的问题


    干杯

    您在班级定义中遗漏了“公共”一词。默认情况下,它将是内部的;)/脸掌。是的,这解决了问题。在我匆匆忙忙地把我早些时候的一期COM删掉的过程中,我错过了公众。我会把这个标记为被接受的答案,因为,是的,它确实注册了。但现在我又回到了之前的问题,即无法创建客户机对象。
     public class HelloWorldCom : IHelloWorldCom