Мой первый проект, библиотека классов типов:
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 для подписи.
Использовать «using Project2;» в проекте CSharpServer я нажал «Добавить / Существующий проект ..» Project2.csproj, после чего я нажал «Добавить ссылку ../ Проекты».
Когда я скомпилировал, Создает две библиотеки 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: Регистрация неподписанной сборки с
/ кодовая база может ок
использовать вашу сборку для вмешательства в другие приложения, которые могут
установлен на
тот же компьютер. Ключ / 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. Все права защищены.
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
Теперь вопрос:
Зарегистрируйте эту dll в сочетании с regasm. Это как только интерфейс regasm? как это повлияет?
Спасибо заранее.