[.net] Visual Studio에서 프로젝트 / 솔루션간에 코드를 어떻게 공유합니까?

공통 코드가있는 두 가지 솔루션이 있으므로 추출하여 서로 공유하고 싶습니다. 또한 다른 사람들에게 유용 할 수 있기 때문에 해당 라이브러리를 독립적으로 릴리스 할 수 있기를 원합니다.

  • Visual Studio 2008을 사용하는 가장 좋은 방법은 무엇입니까?
  • 프로젝트가 둘 이상의 솔루션에 있습니까?
  • 별도의 코드 조각에 대한 별도의 솔루션이 있습니까?
  • 솔루션이 다른 솔루션에 의존 할 수 있습니까?


답변

여러 솔루션으로 프로젝트를 참조 할 수 있습니다.

라이브러리 또는 핵심 코드를 하나의 프로젝트에 넣은 다음 두 솔루션 모두에서 해당 프로젝트를 참조하십시오.


답변

두 프로젝트간에 코드 파일을 “링크”할 수 있습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Add-> Existing item를 선택한 다음 Add버튼 옆의 아래쪽 화살표를 클릭하십시오 .

스크린 그랩

내 경험상 연결은 라이브러리를 만드는 것보다 간단합니다. 링크 된 코드는 단일 버전의 단일 실행 파일을 생성합니다.


답변

File > Add > Existing Project...현재 솔루션에 프로젝트를 추가 할 수 있습니다. 위의 게시물 중 어느 것도 지적하지 않기 때문에 이것을 추가하면됩니다. 이를 통해 여러 솔루션에 동일한 프로젝트를 포함시킬 수 있습니다.


답변

둘 이상의 솔루션에 프로젝트를 포함 있습니다 . 프로젝트에 어떤 솔루션이 포함되어 있는지에 대한 개념이 없다고 생각합니다. 그러나 또 다른 대안은 첫 번째 솔루션을 잘 알려진 위치에 빌드하고 컴파일 된 바이너리를 참조하는 것입니다. 릴리스 또는 디버그 구성에서 빌드 중인지 여부에 따라 다른 버전을 참조하려는 경우 약간의 작업이 필요하다는 단점이 있습니다.

하나의 솔루션이 실제로 다른 솔루션에 의존하게 만들 수는 없지만 사용자 정의 스크립트를 통해 적절한 순서로 자동화 된 빌드를 수행 할 수 있다고 생각합니다. 기본적으로 공용 라이브러리는 NUnit 등과 같은 다른 타사 종속성 인 것처럼 취급합니다.


답변

다음 기술을 사용하여 인라인 와일드 카드를 사용할 수 있습니다 (@Andomar의 솔루션이 .csproj에 저장되는 방식입니다)

<Compile Include="..\MySisterProject\**\*.cs">
  <Link>_Inlined\MySisterProject\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>

넣다 :

    <Visible>false</Visible>

MySisterProject위와 같이 ‘가상 기존 항목’폴더에서 항목을 추가하거나 제거하면 파일을 숨기거나 와일드 카드 포함이 확장되지 않도록하려면 .


답변

공통 코드를 포함 할 별도의 클래스 라이브러리 프로젝트를 작성하기 만하면됩니다. 이를 사용하는 솔루션의 일부일 필요는 없습니다. 필요한 모든 프로젝트에서 클래스 라이브러리를 참조하십시오.

유일한 트릭은 프로젝트를 참조하는 솔루션의 일부가 아니기 때문에 프로젝트를 참조하기 위해 파일 참조를 사용해야한다는 것입니다. 즉, 실제 출력 어셈블리는이를 참조하는 프로젝트를 작성하는 모든 사람이 액세스 할 수있는 위치에 배치해야합니다. 예를 들어 어셈블리를 공유에 배치하면됩니다.


답변

둘 이상의 솔루션에 동일한 프로젝트를 포함시킬 수 있지만 언젠가는 문제가 발생할 수 있습니다 (예 : 디렉토리를 이동할 때 상대 경로가 유효하지 않을 수 있음)

수년간의 어려움을 겪은 후에 마침내 실행 가능한 솔루션을 찾았지만 소스 제어를 위해 Subversion을 사용해야합니다 (나쁜 것은 아닙니다)

솔루션의 디렉토리 레벨에서 솔루션 에 포함하려는 프로젝트를 가리키는 svn : externals 특성을 추가 하십시오. Subversion은 저장소에서 프로젝트를 가져 와서 솔루션 파일의 하위 폴더에 저장합니다. 솔루션 파일은 단순히 상대 경로를 사용하여 프로젝트를 참조 할 수 있습니다.

시간이 더 있으면 자세히 설명하겠습니다.