如何从两个C#项目生成一个dll?C#DLL COM+C#DLL



我的第一个项目,类型类库:

using System;
using System.Collections.Generic;
using System.Text;
namespace Project2
{
    public class Class1
    {
        public int num = 33;
    }
}

使用命令行sn -k keyPair.snk,我生成一个密钥对,并添加密钥对.snk进行签名。

第二个项目类型类库:

using System;
using System.Runtime.InteropServices;
using Project2;
namespace CSharpServer
{
   [ComVisible(true)]
   [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]
   public interface IManagedInterface
   {
      int PrintHi();
   }
   [ComVisible(true)]
   [Guid("C6659361-1625-4746-931C-36014B146679")]
   public class InterfaceImplementation : IManagedInterface
   {
      public int PrintHi()
      {
         Class1 obj = new Class1(); // Using first project
         return obj.num; // return public int num = 33;
      }
   }
}

我添加了keypair.sk进行签名.

要在项目CSharpServer中使用"使用Project2;",我单击了"添加/现有项目.."Project2.csproj,然后单击了"增加参考../Projects"。

当我编译时,生成两个dll,如何用两个项目生成一个dll

我读过关于ILMerge的文章。它似乎结合了两个dll。但是我有源代码,难道没有办法在Visual Studio中加入吗?

我读过CodeProject的这篇文章,其中说"很明显,你可以将所有源文件添加到一个项目中",但如果我的第一个项目有1000个类?

我试过ilmerge:"C:\Program Files\Microsoft\ILMerge\ILMerge"/target:library/out:project.dll CSharpServer.dll Project2.dll

生成一个文件project.dll

问题:如果我这样做:regasm project.dll/tlb/codebase

RegAsm:警告RA0000:正在向注册未签名的程序集/代码库can ca使用程序集干扰可能安装于同一台计算机。/codebase开关仅用于带有签名组件。请为程序集提供一个强名称并重新注册它类型注册成功。。。

如何对此合并的dll进行签名?CSharpServer.dll是具有接口的组件COM,需要向regasm注册。不需要Project2.dll。细节我只想注册CSharpServer.dll,但项目.dll包含(CSharpSServer.dll+Project2.dll(。现在呢?

我试着签了名:sn -R project.dll keyPair.snk。输出:

Microsoft(R(.NET Framework强名称实用程序2.0.50727.42版版权所有(c(Microsoft Corporation。保留所有权利。

project.dll不代表强名称程序集

该标志适用于:若要签名,必须提取公钥:sn -p keyPair.snk publickey.snk

我读了它给出了一个.NET SN

指定和匹配公钥:"C:\Program Files\Microsoft\ILMerge\ILMerge"/keyfile:publickey.snk/target:library/out:project.dll CSharpServer.dll Project2.dll

使用命令签名后:sn -R project.dll keyPair.snk

现在的问题是:结合regasm注册此dll。这就像是regasm-only接口?它有什么影响?

提前感谢。

您必须在visualstudio外部使用csc.exe编译代码,并自己传递命令行参数(所有.cs文件(。

这会有点乏味,但可以做到。看这里。

相关内容

最新更新