2010-12-02 5 views
20

dll을 만들지 않고 두 프로젝트간에 코드 공유를 수행하려면 어떻게해야합니까?dll없이 2 개의 프로젝트간에 코드 공유

문제는 다음과 같습니다. 사용자의 & 그룹을 LDAP에서 데이터베이스로 동기화하는 도구가 있습니다.

이제 도구는 Windows 서비스이지만 테스트하는 것은 매우 어렵고 시간이 오래 걸립니다.

그래서 LDAP 동기화를 테스트하고 각 소스 코드 파일을 서비스 프로젝트에 복사 할 수있는 콘솔 응용 프로그램을 만들었습니다.

하지만 공통 파일을 동기화 상태로 유지하는 것은 약간의 문제입니다. 이것은 아마도 3 번째 프로젝트, ExecutingAssembly 경로를 사용해야하는 Windows 설치 프로그램 (...)에 문제가 발생하기 때문에 dll을 만들고 싶지 않습니다.

방법이 있습니까? 별도의 DLL을 만들지 않고 코드를 공유 할 수 있습니까? Automagic statical linking, 그렇게 말하죠?

+0

Vista 및 최신 심볼릭 링크가 유용 할 수 있습니다. – CodesInChaos

+0

@CodeInChaos, 소스 콘트롤/백업에 심볼릭 링크를 쉽게 저장할 수있는 방법이 없습니다. =) – Rob

+0

http://stackoverflow.com/questions/954560/what-does-git-do-to-files-that-are-a-symbolic-link는 git가 sym-links로 sym-links를 저장하는 것처럼 들립니다. 비스타를 아직 사용하지 않아서 창문에서 작동하는지 모르겠다. 유스 케이스에 따라 ignore-file에 sym- 링크를 추가하고 각 코더에 대해 수동으로 생성하는 것으로 충분할 수 있습니다. 약간 hackish,하지만 작동해야합니다. – CodesInChaos

답변

29

Visual Studio에서 How about adding a file as a link.

바로 콘솔 테스트 응용 프로그램 프로젝트를 클릭> 파일에 실제 Windows 서비스 프로젝트에서 파일 대화 상자 탐색을 추가 ->을 선택하십시오 공유하려는 파일 -> 추가 버튼에서 링크 옵션으로 추가를 선택하십시오.

+2

Add 버튼에있는 뾰족한 드롭 다운 삼각형은 발견하기가 어렵습니다! 코드가 같지만 프로젝트 래퍼가 다른 Android 및 Windows 용 공유 라이브러리를 원할 경우 매우 유용합니다. – AndyM

+0

여기에서 살펴보실 수 있습니까? http://stackoverflow.com/questions/21301360/share-properties-from-child-app-to-base-project – Goofy

2

동일한 소스 파일을 가리 키도록 프로젝트 파일을 직접 수정하는 방법은 어떻습니까?

다른 옵션 - 두 프로젝트를 같은 폴더에 넣습니다. 하나에 클래스를 추가 한 다음 다른 프로젝트에 기존 클래스를 추가하고 방금 생성 한 클래스를 가리 킵니다.

2

당신은 할 수 :

  • 는 DLL을 생산하는 별도의 프로젝트에서 공유 코드를 유지하고 하나의 어셈블리로 DLL & EXE를 설정하는 등 ILMerge 같은 도구를 사용합니다.
  • 은 프로젝트 파일을 조정하거나 소스 트리 레이아웃으로 펑키 한 작업을 수행하여 여러 프로젝트간에 소스 파일을 공유합니다.

모든 말로, 최선의 방법은 총알을 물고 공유 어셈블리 (DLL)에 공유 코드를 저장하는 것입니다. 예를 들어이 코드를 WCF 서비스를 통해 노출하려는 경우 어떻게됩니까? 동일한 코드 파일을 참조하는 3 개의 장소가 있으므로 복잡한 작업이 시작됩니다. 지금 당신의 인생을 가장 쉽게 만들어주는 것에 대해 생각하지 말고 미래에 어떤 일을 할 것인지 (그리고 코드를 유지해야하는 다른 사람들의) 인생을 더욱 편하게 만들어 줄지 생각해보십시오! 추가>를 선택 기존 파일을 - - =)

+0

ILMerge가 너무 자동적입니다 (자동화 할 수있는 쉬운 방법이 없으면).나는 '펑키 한 무언가'(= 링크로 파일 추가)를 결정했습니다. 마지막 단락에 관해서는 - 모든 유효하고 좋은 주장이지만, 언급 된 이유로 dll을 원하지 않습니다. 또한 변경을 할 때마다 dll 프로젝트를 컴파일해야하는데, 이렇게하면 실행 버튼을 누를 수 있습니다. 소스 안전에 대해 모르겠지만 최악의 경우 링크가 빠르게 추가됩니다. –

+0

물론 빌드 후 이벤트에서 ILmerge를 자동화하여 명령 줄에서 실행할 수 있습니다. –

+0

@StefanSteiger 실행 버튼을 누르는 것이 build & run이라는 것을 알고 있습니까? 미처리한 변경 사항이있는 경우 프로젝트와 실행중인 프로젝트가 동일한 솔루션에서 다시 컴파일됩니다. – Dan

9

파일을 프로젝트에 링크로 추가 할 수 있습니다. Add Existing Item 대화 상자에서 추가 버튼의 오른쪽에 드롭 다운이 있습니다. 선택 "링크로 추가"하려면이 옵션을 사용 alt text

해결책 항목으로 파일을 넣고 각 프로젝트에 대한 링크로 추가 할 수 있습니다.

0

기능을 공유하려면 DLL 등을 사용해야합니다.

공유하고자하는 것이 소스이므로 공유하고있는 것은 파일 공유입니다. 따라서 프로젝트가 외부 소스를 참조하도록 만들거나 소스 컨트롤로이를 수행 할 수 있습니다.

Visual SourceSafe를 사용하는 경우 두 폴더를 연결할 수 있습니다. VSS는 파일이 동일한 파일로 취급되는지 확인합니다.

0

Windows 서비스 프로젝트를 관리하고 테스트하는 데 사용하는 설정에 대해 설명하겠습니다. 이 질문은 "DLL없이 코드 공유"(Unmesh의 대답은 그 문제를 해결합니다)에 대한 대답은 아니지만 OP가 아마도 이라는 DLL을 얼마나 쉽게 알지 못한다고 생각합니다. 어쨌든, 나는 그것이 도움이 되길 바라고 있습니다. 누군가.


솔루션을 만들려면 LDAPSync를 사용하십시오. 이 솔루션의 세 가지 프로젝트를 만듭니다

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

LDAPSyncLib 비즈니스 로직과 주요 기능을 모두 포함하는 DLL 프로젝트입니다. LDAPSyncSvc

는 두 개의 클래스, ServiceBase에서 상속 서비스 컨트롤러 클래스 및 서비스에 대한 Installer 클래스를 포함하는 Windows 서비스 프로젝트입니다. 이 프로젝트에는 LDAPSyncLib에 대한 "프로젝트 참조"가 있습니다.

LDAPSyncTest은 필요에 따라 GUI 응용 프로그램 (WinForms, WCF 등) 또는 콘솔 응용 프로그램입니다. 이 프로젝트에는 LDAPSyncLib에 대한 "프로젝트 참조"도 있습니다. 그 유일한 목적은 테스트 목적으로 비즈니스 로직에 필요한 호출을 쉽게 만들 수있는 인터페이스를 제공하는 것입니다. Visual Studio에서 이것을 "시작 프로젝트"로 설정하십시오.

이제 Visual Studio를 통해 디버그를 실행하면 테스트 호출을 수동으로 수행하는 데 사용할 수있는 멋진 GUI 또는 명령 창이 표시됩니다. Windows 서비스로 설치하면 LDAPSyncSvc 프로젝트의 컨트롤러 클래스가 인계되어 필요한 모든 서비스 요청 (시작, 중지, 일시 중지 등)을 처리합니다.

우리는 약 30 개의 자체 Windows 서비스 프로젝트가 있습니다. 우리는 10 년 이상 지속적으로 관리, 개발 및 테스트 해 왔으며 이러한 워크 플로우는 발생했을 때 버그를 신속하게 찾아 수정하는 데 매우 중요합니다. 프로젝트에 대한 행운을 빈다. 미래의 Google 직원에게 도움이되기를 바랍니다.

관련 문제