문제

'일반 사용자'버전과 'Pro'버전의 두 버전으로 관리 코드 (주로 C ++/CLI)의 도구를 작성합니다.

핵심 코드가 두 버전 사이에서 동일하다는 사실은 결과 도구를 단일 어셈블리 (DLL)로 패키지하려면 약간의 문제를 일으켰으며 공통에 대한 .CPP 파일을 포함시키지 않아도됩니다. 도구의 두 버전의 프로젝트에서 코드. 차라리 공통 코드를위한 프로젝트와 각 버전의 도구에 대한 프로젝트를 갖고 각 도구 프로젝트의 각 버전이 공통 코드에 의존하여 원하는대로 연결하도록합니다.

관리되지 않는 C ++에서는 공통 코드를 정적 라이브러리에 배치하고 도구의 두 버전을 연결하여이를 수행합니다. 나는 이것을 C ++/CLI에서 작동시킬 수없는 것 같습니다. 공통 코드를 DLL 어셈블리로 구축 해야하는 것으로 보이며 원하는 것보다 더 많은 DLL이 발생합니다.

따라서 요약하면 한 프로젝트에서 공통 코드를 구축하고 각 최종 제품 프로젝트와 연결하여 공통 코드를 포함하는 두 개의 단일 DLL 어셈블리를 생성하는 방법을 해결할 수 없습니다.

나는 아마도 뭔가 잘못하고 있지만 NetModules와 무엇이든이 작업을 수행하는 방법을 알아 내려고 노력했으며 그 일을 할 수 없었습니다. 결국 내가 작동하는 유일한 방법은 링커에 작동하는 결과보다는 공통 코드 어셈블리의 빌드 제품을 연결하도록하는 것이지만 약간의 해킹 IMHO입니다.

어쨌든,이 문제를 해결 해야하는 방법에 대한 제안이 있습니까?

편집 : 생성 된 어셈블리가 100% 관리 코드가 아니라는 사실을 언급 했어야한다고 생각했을 것입니다. 아마도 C ++/CLI로 생성 된 어셈블리와는 상당히 흔한 관리 및 관리되지 않은 코드가 혼합되어 있습니다.

도움이 되었습니까?

해결책

모든 DLL에 짜증이 나면 다운로드 일 머지. 나는 이것을 사용하여 여러 DLL을 함께 고객을 위해 사용하기 쉬운 .exe로 묶습니다.

다른 팁

말했듯이, Ilmerge는 한 가지 방법입니다. 개인적으로 DLL을 많이 가진 exe를 번들링하는 경우 Netz.

당신은 사용할 수 있습니다 모듈. 어셈블리 링커를 사용하여 조립품에 연결할 수 있습니다. al.exe.

이것을 올바르게 이해하고 있다면 두 개의 프로젝트가 포함 된 솔루션이 있습니다. "일반"사용자를위한 하나의 프로젝트와 "Pro"사용자를위한 하나의 프로젝트. Visual Studio를 사용하면 다른 프로젝트의 다른 파일 소스에 "링크"를 추가 할 수 있습니다. "Pro"버전이 실제 핵심 코드 파일이 있고 "일반"버전에서 기존 버전을 추가하는 경우 -> "Pro"프로젝트에서 파일을 찾은 다음 추가 버튼으로 아래쪽 화살표를 클릭하고 "링크 추가"를 선택합니다. ". 이제 두 프로젝트 사이에 문자 그대로 동일한 단일 파일이 있습니다.

이것이 .NET 컴파일 프로세스의 단점입니다. 정적 라이브러리 및 함께 보유하는 헤더 파일과 같은 것을 가질 수는 없으며 모든 것이 하나의 큰 DLL 파일로 유지되며 정보를 공유하는 유일한 방법은 공통 DLL을 구축하는 것입니다. 다른 어셈블리에서 참조하거나 각 DLL에서 코드를 복제합니다 (아마도 프로젝트간에 .CS 파일을 복사/연결하여).

두 번째 방법은 동일한 이름을 가지고 있어도 다른 유형을 선언합니다. 이렇게하면 원격 (또는 프로세스 간의 특정 공유 인터페이스에 캐스팅이 필요한 것)과 같은 것들로 엉덩이에 물게됩니다.

리모슈 소프트 도롱뇽 당신을 연결합니다. 기본적으로 기본 컴파일러 및 링커입니다.

모노를 사용할 때 (또는 Cygwin이 옵션입니다) mkbundle 유효한 선택 일 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top