我的第一个项目,输入类库:
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
指定和匹配公钥: “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唯一的界面?有什么影响呢?
先谢谢。