Как создать одну DLL из двух проектов C #?C # DLL COM + C # DLL - PullRequest
0 голосов
/ 04 июля 2011

Мой первый проект, библиотека классов типов:

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? как это повлияет?

Спасибо заранее.

1 Ответ

0 голосов
/ 04 июля 2011

Это нужно сделать, скомпилировав код с помощью csc.exe вне Visual Studio и передав параметры командной строки самостоятельно (все .cs файлы).

Это будет немного утомительно, но может бытьсделанный.Смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...