安装.NET COM + DLL

wog*_*les 5 c# asp.net com dll

我在我们的一台服务器上安装了以下COM对象,我需要重写...一些遗留代码使用该对象如下:

Set oEmail = CreateObject("SSDSCommunicator.EmailClass")
oEmail.Send(szFrom, szRecipients, szSubject, szEmailBody, SMTPServer, szErr, "", , , , True)
Run Code Online (Sandbox Code Playgroud)

我已经按照这个答案的例子,但我很难注册COM组件.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using System.Runtime.InteropServices;


namespace SSDSCommunicator
{

    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
    public interface IEmailClass
    {
        void launch();
        bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false);
    }

    [ClassInterface(ClassInterfaceType.None), Guid("A00C16DA-1791-4A3A-8D16-4765A9FAD060"), ProgId("SSDSCommunicator.EmailClass")]
    public class EmailClass : IEmailClass
    {
        private string path = null;

        public void launch()
        {
            Console.WriteLine("I launch scripts for a living.");

        }

        public bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "",    bool bHTMLBody = false)
        {
    ...
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

该项目成功建立.如何将dll注册为COM对象,以便旧的VB6代码可以工作?

我已经勾选了COM互操作的寄存器,并在项目设置中显示了汇编COM.

我没有运气regsvr32(没有找到入口点)或regasm ...

COM对象在旧服务器上看起来像这样:

在此输入图像描述

编辑

在运行regasm命令后,我是否能够在组件服务中看到COM对象?

regasm C:\...\SSDSCommunicator.dll /CodeBase
Run Code Online (Sandbox Code Playgroud)

wog*_*les 1

好的,亲爱的...找到了这个问题的答案,感谢 user957902 和 GTG(如果你想要积分,请在下面写一些答案):

  • 构建了针对 x86 的解决方案
  • 使用 .snk 文件对程序集进行签名
  • 继承的ServicedComponent
  • 在组件服务中手动添加SSDSCommunicator组件,然后将dll添加为组件

最终代码如下:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Mail;
    using System.Runtime.InteropServices;
    using System.EnterpriseServices;


    namespace SSDSCommunicator
    {

        [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
        public interface IEmailClass
        {           
            bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false);
        }

        [ClassInterface(ClassInterfaceType.None), Guid("A00C16DA-1791-4A3A-8D16-4765A9FAD060"), ProgId("SSDSCommunicator.EmailClass")]
        public class EmailClass : ServicedComponent, IEmailClass
        {
            private string path = null;           

            public bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "",    bool bHTMLBody = false)
 {...
}

        }
    }
Run Code Online (Sandbox Code Playgroud)