我的第一個項目,類型類庫:如何從兩個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
我生成一個密鑰對,我加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文件\微軟\ ILMerge \ ilmerge」/目標:庫/out:project.dll CSharpServer.dll Project2.dll
生成一個文件project.dll
問題: 如果我這樣做:regasm project.dll/TLB /代碼庫
... RegAsm:警告RA0000:註冊一個無符號的組合與 /代碼庫可以CA 使用您的程序集來干擾可能在同一臺計算機上安裝的 上的其他應用程序。/codebase開關僅用於 ,帶有簽名 程序集。請給你的大會一個強有力的名字,並重新註冊 它。 類型註冊成功...
如何簽署此合併的DLL? CSharpServer.dll是帶接口的Component 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。版權所有。
項目。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
After s用命令點亮: sn -R project.dll keyPair.snk
現在問題是: 註冊這個dll結合regasm。這就像regasm唯一的界面?它有什麼影響?
謝謝先進。
你爲什麼不做一個單一的項目? – SLaks
我模擬使用C#COM組件的庫。所以我不能放入同一個項目。 – Cobaia
您從regasm.exe獲得的消息只是一個警告。這意味着:「你即將調用DLL地獄,你確定?」。你在你的開發機器上。運行ilmerge後,您必須手動簽署合併的程序集。使用sn.exe。合併的程序集包含來自project2.dll的類,並且現在在程序集中有1001個類而不是1000個,這不相關。請務必在每個要顯示的界面上明確使用[ComVisible]。 –