먼저 프로젝트 유형 클래스 라이브러리 내 명령 행 sn -k keyPair.snk
와두 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;
}
}
나는 키 쌍을 생성하고 내가 서명 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에서이 조인을 할 수있는 방법이 없을 것입니다.
나는 "당신은 분명 단 하나의 프로젝트에 모든 소스 파일을 추가 할 수 있습니다"하지만 내 첫 번째 프로젝트 1000 개 클래스가있는 경우라고 this CodeProject article 읽어?
나는 ilmerge을 시도 : "C : \ 프로그램 Files \ Microsoft \ ILMerge \ ilmerge"/ 대상 : 도서관 /out:project.dll CSharpServer.dll Project2.dll
하나의 파일 project.dll을 생성
문제 : 내가 할 경우 : RegAsm을의 project.dll/TLB/코드베이스를
... 가 RegAsm을 : RA0000 경고 : /코드베이스로 서명되지 않은 어셈블리를 등록 할 수 캘리포니아 어셈블리를 사용하여 동일한 컴퓨터에 에 설치된 수있는 다른 응용 프로그램을 방해하십시오./codebase 스위치는 부호가있는 어셈블리와 함께 사용하기위한 것입니다. 어셈블리에 강력한 이름을 지정하고 을 다시 등록하십시오. 유형이 등록되었습니다 ...
이 병합 된 dll에 서명하는 방법은 무엇입니까? CSharpServer.dll 인터페이스와 구성 요소 COM과 RegAsm을 등록해야합니다. Project2.dll 필요하지 않습니다. 세부 정보, CSharpServer.dll 만 등록하려고하지만 project.dll에는 (CSharpServer.dll + Project2.dll)이 포함됩니다. 그리고 지금?
나는 서명하려고 시도 : sn -R project.dll keyPair.snk
. 출력 :
마이크로 소프트 (R) .NET 프레임 워크 강력한 이름 유틸리티 버전 2.0.50727.42 저작권 (c) Microsoft의. 판권 소유.
프로젝트
sn -p keyPair.snk publickey.snk
지정 및 공개 키와 일치 읽어 : 공개 키를 추출, 서명하려면 한 : DLL은
부호가 함께 작동하는 강력한 이름의 어셈블리를 표시하지 않습니다 "C : \ Program Files \ Microsoft \ ILMerge \ ilmerge"/keyfile:publickey.snk/target : 라이브러리 /out:project.dll CSharpServer.dll Project2.dll
다음 명령으로 실행 : sn -R project.dll keyPair.snk
이제 질문은 : regasm과 결합하여이 dll을 등록하십시오. 그것은 regasm 전용 인터페이스 같은거야? 그것은 무엇에 영향을 미칩니 까? 고급의
감사합니다.
왜 단일 프로젝트를 만들지 않습니까? – SLaks
C# COM 구성 요소에 대한 라이브러리의 사용을 시뮬레이션하고 있습니다. 그래서 나는 같은 프로젝트에 참여할 수 없다. – Cobaia
regasm.exe에서받은 메시지는 경고 일뿐입니다. 즉, "DLL 지옥을 호출하려고합니다. 확실합니까?" 당신은 개발 컴퓨터에 있습니다. ilmerge를 실행 한 후에 병합 된 어셈블리에 직접 서명해야합니다. sn.exe를 사용하십시오. 병합 된 어셈블리에 project2.dll의 클래스가 포함되어 있고 어셈블리에 1000 개가 아닌 1001 개의 클래스가있는 것은 적합하지 않습니다. 표시하려는 각 인터페이스에서 [ComVisible]을 명시 적으로 사용해야합니다. –