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

时间:2011-07-04 15:55:34

标签: c# assemblies

我的第一个项目,输入类库:

using System;
using System.Collections.Generic;
using System.Text;

namespace Project2
{
    public class Class1
    {
        public int num = 33;
    }
}

使用命令行sn -k keyPair.snk我生成了一个密钥对,并添加了keypair.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.snk来签名。

使用“使用Project2;”在项目CSharpServer中我单击“添加/现有项目..”Project2.csproj之后,我点击了“添加参考../项目”。

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

我读到了ILMerge。它似乎结合了两个dll。但我有源代码,无法在Visual Studio中进行此连接吗?

我读到this CodeProject article说“你显然可以只将所有源文件添加到一个项目中”,但如果我的第一个项目有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:使用注册无符号程序集   / codebase可以ca       使用您的程序集干扰可能的其他应用程序   安装上       同一台电脑。 / codebase开关仅供使用   签字       组件。请给你的大会一个强有力的名字并重新注册   它。       类型已成功注册...

如何签署此合并的dll? CSharpServer.dll是具有接口的组件COM,需要使用regasm注册。 Project2.dll不需要。 详情, 我只想注册CSharpServer.dll,但project.dll包含(CSharpServer.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

我读了Giving a .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

现在的问题是: 注册此dll与regasm结合使用。这就像regasm唯一的界面?有什么影响呢?

先谢谢。

1 个答案:

答案 0 :(得分:0)

您必须使用Visual Studio外部的csc.exe编译代码并自行传递命令行参数(所有.cs文件)。

这将有点乏味但可以完成。看here