2011-07-04 5 views
0

먼저 프로젝트 유형 클래스 라이브러리 내 명령 행 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

내가 Giving a .NET SN

지정 및 공개 키와 일치 읽어 : 공개 키를 추출, 서명하려면 한 : 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 전용 인터페이스 같은거야? 그것은 무엇에 영향을 미칩니 까? 고급의

감사합니다.

+3

왜 단일 프로젝트를 만들지 않습니까? – SLaks

+0

C# COM 구성 요소에 대한 라이브러리의 사용을 시뮬레이션하고 있습니다. 그래서 나는 같은 프로젝트에 참여할 수 없다. – Cobaia

+0

regasm.exe에서받은 메시지는 경고 일뿐입니다. 즉, "DLL 지옥을 호출하려고합니다. 확실합니까?" 당신은 개발 컴퓨터에 있습니다. ilmerge를 실행 한 후에 병합 된 어셈블리에 직접 서명해야합니다. sn.exe를 사용하십시오. 병합 된 어셈블리에 project2.dll의 클래스가 포함되어 있고 어셈블리에 1000 개가 아닌 1001 개의 클래스가있는 것은 적합하지 않습니다. 표시하려는 각 인터페이스에서 [ComVisible]을 명시 적으로 사용해야합니다. –

답변

0

Visual Studio 외부에서 csc.exe을 사용하여 코드를 컴파일하고 명령 줄 매개 변수를 직접 전달해야합니다 (모두 .cs 개 파일).

이것은 약간 지루 하겠지만 할 수 있습니다. Look here.

+0

나는 그것을하려고 노력할 것이다, 그러나 "모든 Cs 파일들"을 위해. 내 프로젝트 중 하나에 1000 개 이상의 수업이있는 경우 이상한 것 같습니다 – Cobaia

+0

? 이 작업을 수행하는 간단한 방법이 있습니까? – Cobaia

+1

나는 더 좋은 방법을 모른다. – Aliostad

관련 문제