2012-09-11 2 views
5

.Net C# 프로젝트를 여러 dll로 컴파일하려고합니다. 하지만 여기에 문제가 있습니다.하나의 프로젝트를 .NET에서 여러 dll로 컴파일하는 방법

이것은 내 프로젝트 구조입니다.

Bin 
Dir1 
Dir2 
File1.cs 
File2.cs 
myproject.csproj 

이 프로젝트를 File1.dll 및 File2.dll로 컴파일하려고합니다. File1.dll과 File2.dll은 Dir1과 Dir2에있는 다양한 .cs 파일에서 코드를 사용합니다. 하위 디렉터리에있는 .cs 파일의 이러한 클래스 중 일부는 File1.cs에서 필요하며 다른 클래스는 File2.cs에서 필요합니다. File1.cs 및 File2.cs에서 사용되는 일부 파일이 있습니다.

csc /t:library /out:File1.dll /recurse:*.cs 
csc /t:library /out:File2.dll /recurse:*.cs 

그러나 결과 DLL을 그냥 다른 파일 이름으로 서로의 정확한 복사본과 같다 :

나는 다음과 같은 사용. 내가 그들을 위해 개체를 브라우저에서 각 dll을 검사 할 때 Dir1 및 Dir2 File1..dll File1.cs 및 유사하게 참조되는 .cs 파일에서 클래스를 검사 할 수 있도록 그들을 컴파일하는 방법이 있나요? File2.dll?

저는 이것을 Visual Studio의 게시 빌드 단계의 일부로 선호하고 싶습니다. 시간에 대한

감사합니다 ...

편집 모든 응답을

감사합니다. 해결책을 여러 프로젝트로 나눌 수있는 많은 제안이있었습니다. 그게 한 가지 방법이지만, File1.dll과 File2.dll과 같은 두 dll에 대해 만들어진 종속성을 원한다면 나는 확신 할 수 없습니다. 설명해 드리겠습니다.

여러 프로젝트를 만들 때 나타나는 문제점은 File1.cs와 File2.cs에 필요한 코드가 있다는 것입니다. 나는 두 프로젝트에서 그것들을 반복하기를 원하지 않는다. 세 번째 프로젝트에서 공용 코드를 유지하면 File1.dll과 File2.dll에 모두 필요한 세 번째 dll이 만들어집니다. 나는 이것을 원하지 않는다. 나는 File1.dll과 File2.dll 만 만들어서 하나의 프로젝트에서 둘 다 유지하고 싶습니다. 이 문제를 어떻게 해결할 수 있을지에 대한 제안이 있으십니까?

답장을 보내 주셔서 다시 한 번 감사드립니다.

건배.

+0

각 'dll'에 기여할'.cs' 파일을 지정해야합니다. 이러한 프로젝트가 하나의 프로젝트에 있기 때문에 기대하지 않았던 종속성이 있음을 알 수 있습니다. – Oded

+0

감사합니다. 그러나 그것은 프로젝트 내용이 바뀔 때마다 필자의 스크립트를 잠재적으로 변경해야 할 필요가 있음을 의미 할 것입니다. 또는 최소한 전체 프로젝트의 변경 사항을 수동으로 분석하십시오. 참조 된 클래스를 자신이 속한 파일/폴더에서 자동으로 연결할 수있는 스위치가 있습니까? 모든 파일을 매번 포함시키지 않고 VS에서 프로젝트를 빌드 할 때마다 새 파일을 참조해야합니다. – user20358

+0

맞습니다. 또는 내장 된 것과 다른 빌드 시스템을 사용하십시오.하지만 동기화 된 상태로 유지해야합니다. 프로젝트를 여러 개로 나누는 것이 가장 쉽습니다. – Oded

답변

9

각 구성 요소마다 별도의 라이브러리가 필요하면 동일한 솔루션 내에서 프로젝트를 여러 프로젝트로 분할해야합니다.

중복 된 코드와 관련된 문제를 피하기 위해 중복 된 복사본 (Add as link)을 만들지 않고 동일한 파일을 여러 프로젝트에 포함시킬 수 있습니다.

+0

아마도 Visual Studio를 사용하여 할 수있는 가장 쉬운 방법 일 것이지만, 분명히 유일한 방법은 아닙니다. – Oded

+0

사실, 상관없이 그것을 할 올바른 방법 일 것입니다. – PhonicUK

+0

업데이트 됨 내 질문 ... – user20358

1

이렇게하려면 여러 프로젝트가 필요합니다. 둘 이상의 프로젝트에서 동일한 CS 파일을 참조하는 것을 막을 수있는 방법은 없습니다.

또한 논리적 그룹화가 필요한 경우 두 솔루션 모두 하나의 솔루션 아래에 존재할 수 있습니다.

+0

내 질문 업데이트 ... 또한, 어떻게 하나 이상의 프로젝트에서 동일한 CS 파일을 참조하려고합니까? – user20358

+0

여러 프로젝트가있는 솔루션을 사용하는 경우 프로젝트 -> 추가 ... -> 기존 항목 ... 중 하나를 마우스 오른쪽 단추로 클릭하고 추가 할 기존 .CS 파일을 찾습니다. VS2010에서이 기능이 작동하는지 확인하고 이전 버전에서 제대로 작동하는지 확인하십시오. – Sepster

2

생성하려는 각 DLL에 대해 하나의 프로젝트를 만들고 각각에 특정한 파일을 추가하십시오. 예를 들어 File1.cs (및 기타 파일은 필요에 따라)을 포함하는 myproject1.csproj이고 은 File2.cs을 포함합니다. 그런 다음 공통 파일을 포함하는 세 번째 프로젝트를 만들고 처음 두 개에서 공유 어셈블리를 참조하십시오.

다른 코드를 포함하거나 제외하려면 #if 문을 사용하여 전 처리기 상수를 확인하십시오.

+0

감사합니다. 여러 프로젝트를 만들 때 문제는 File1.cs 및 File2.cs에 필요한 코드가 있다는 것입니다. 나는 두 프로젝트에서 그것들을 반복하기를 원하지 않는다. 세 번째 프로젝트에서 공용 코드를 유지하면 File1.dll과 File2.dll에 모두 필요한 세 번째 dll을 의미합니다. 나는 이것을 원하지 않는다. 나는 단지 File1.dll과 File2.dll을 원한다. 그래서 나는 그들 모두를 하나의 프로젝트에서 유지하고있다. – user20358

1

조건부 컴파일 기호 (#if DLL1, #if DLL2)를 사용할 수 있습니다.

그런 다음 빌드 단계에서 /p:DefineConstants 옵션을 사용하여 msbuild를 호출하여 해당 기호를 설정하십시오.

MSBUILD /p:DefineConstants=DLL1 ... 

은 기본적으로 설정 다른 조건부 컴파일 기호를 두 번 프로젝트를 컴파일.

+0

고마워. 어떻게 작동하는지 모르겠습니다. 이것을 확인하고 돌아 오도록하겠습니다. – user20358

+0

프로젝트 구성의 일부로이를 설정하면 IDE에서 작업하는 동안 종속성 또는 컴파일 오류의 이점을 얻을 수 있습니다. – StingyJack

관련 문제