Visual Studio 2015에서 공유 프로젝트와 클래스 라이브러리의 차이점은 무엇입니까?


240

Visual Studio 2015의 새로운 기능을 살펴 보았고 공유 프로젝트가 많이 등장했지만 클래스 라이브러리 또는 휴대용 클래스 라이브러리를 사용하는 것과 다른 점을 이해하지 못합니다. 누구든지 설명 할 수 있습니까?

편집 : 공유 프로젝트는 Visual Studio 2015의 새로운 기능이며 이식 가능한 클래스 라이브러리와 다릅니다. 휴대용 클래스 라이브러리가 무엇인지 이해합니다. 내가 이해하려고하는 것은 공유 프로젝트가 클래스 라이브러리와 어떻게 다른지입니다. 아래 링크를 참조하십시오.

http://www.c-sharpcorner.com/UploadFile/7ca517/shared-project-an-impressive-features-of-visual-studio-201/


답변:


238

공유 프로젝트와 클래스 라이브러리의 차이점은 후자가 컴파일되고 재사용 단위가 어셈블리라는 것입니다.

전자의 경우 재사용 단위는 소스 코드이며 공유 코드는 공유 프로젝트를 참조하는 각 어셈블리에 통합됩니다.

특정 플랫폼 을 대상으로 하지만 여전히 공유해야하는 코드가있는 별도의 어셈블리를 만들려는 경우에 유용 할 수 있습니다 .

여기를 참조 하십시오 :

공유 프로젝트 참조는 솔루션 탐색기의 참조 노드 아래에 표시되지만 공유 프로젝트의 코드 및 자산은 마치 주 프로젝트에 연결된 파일 인 것처럼 처리됩니다.


이전 버전의 Visual Studio 1 에서는 추가-> 기존 항목을 클릭 한 다음 링크를 선택하여 프로젝트간에 소스 코드를 공유 할 수있었습니다. 그러나 이것은 다소 어색했으며 각 소스 파일을 개별적으로 선택해야했습니다. 여러 이종 플랫폼 (iOS, Android 등)을 지원함에 따라 공유 프로젝트 개념을 추가하여 프로젝트간에 소스를보다 쉽게 ​​공유하기로 결정했습니다.


1 지금까지이 질문과 대답은 공유 프로젝트가 Visual Studio 2015의 새로운 기능임을 암시합니다. 실제로 Visual Studio 2013 업데이트 2 에서 데뷔했습니다.


1
동일한 공유 프로젝트를 참조하는 두 개의 프로젝트를 가정 해 봅시다. 그중 하나가 다른 것에 대한 참조를 추가하면 중복 유형 선언 오류가 발생합니까?
Asad Saeeduddin

3
@Asad-확인하지는 않았지만 기대하지는 않습니다. 동일한 이름을 가진 두 개의 고유 한 유형을 가질 수 있으며 동일한 네임 스페이스 내에서 선언되었지만 다른 어셈블리 내에 존재합니다. 그 자체로는 오류가 아닙니다.
Damien_The_Unbeliever

2017 년 OP와 정확히 같은 질문이 있었지만 지금 .net 표준 2.0 이 있기 때문에 . 공유 프로젝트가 더 이상 사용되지 않습니까? 오늘 새로운 webapp 또는 uwp 앱을 만들려면?
JP Hellemons

1
@JPHellemons-.net 표준은 좋지만 어떤 이유로 든 특정 플랫폼 에서만 사용 가능한 기능이있는 경우 공유 프로젝트는 적절한 접근 방법이 될 수 있습니다.
Damien_The_Unbeliever

1
공유 프로젝트를 사용하면 Javascript 파일을 공유 할 수 있습니다. bundleConfig에서 어떻게 사용합니까?
레쓰

34

블로그 에서 더 많은 정보를 찾았습니다 .

  • 클래스 라이브러리에서 코드가 컴파일되면 각 라이브러리에 대한 어셈블리 (dll)가 생성됩니다. 그러나 공유 프로젝트에는 헤더 정보가 포함되지 않으므로 공유 프로젝트 참조가 있으면 상위 애플리케이션의 일부로 컴파일됩니다. 별도의 dll이 생성되지 않습니다.
  • 클래스 라이브러리에서는 C # 코드 만 작성할 수 있지만 공유 프로젝트는 C # 코드 파일, XAML 파일 또는 JavaScript 파일 등을 가질 수 있습니다.

7
클래스 라이브러리는 .xaml도 가질 수 있습니다 (User Controls)
기본값 :

21

짧은 차이가 있습니다

1) PCL은 SharedProject와 같이 .NET Framework에 대한 전체 액세스 권한을 가지지 않습니다.

2) 플랫폼 별 코드의 #ifdef-PCL로 작성할 수 없습니다 ( #ifdef 옵션은 자체 DLL로 별도로 컴파일되므로 컴파일 타임에 (#ifdef가 평가 될 때) PCL에서 사용할 수 없습니다) 공유 프로젝트로 할 수있는 곳 은 어느 플랫폼에 속하는지 알 수 없습니다.

3) 플랫폼 별 코드는 PCL의 Inversion Of Control을 사용하여 달성되며, 여기서 #ifdef 문을 사용하면 공유 프로젝트에서도 동일하게 달성 할 수 있습니다.

PCL과 공유 프로젝트의 차이점을 보여주는 훌륭한 기사는 다음 링크에서 찾을 수 있습니다.

http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/


18

다른 사람들이 이미 쓴 것처럼 짧게 :


코드 (파일) 수준에서 공유 프로젝트 재사용으로 폴더 구조 및 리소스도 허용


어셈블리 레벨에서 pcl 재사용

여기에 대한 대답에서 주로 누락 된 것은 PCL에서 사용할 수있는 기능 축소에 대한 정보입니다. 예를 들어 파일 작업이 제한적입니다 (Xamarin 크로스 플랫폼 프로젝트에서 많은 File.IO 기능이 누락되었습니다).

자세한
공유 프로젝트 :
+ 여러 플랫폼을 대상으로 할 때 #if를 사용할 수 있음 (예 : Xamarin iOS, Android, WinPhone)
+ 각 대상 프로젝트에 사용 가능한 모든 프레임 워크 기능 (조건부 컴파일해야 함)
o 컴파일 타임에 통합
-약간 더 큰 크기 결과 어셈블리
-Visual Studio 2013 업데이트 2 이상 필요

pcl :
+ 공유 어셈블리 생성
+ 이전 버전의 Visual Studio (2013 년 이전 업데이트 2)에서 사용 가능
o 동적으로 링크 된
기능 (참조되는 모든 프로젝트의 하위 집합)

선택의 여지가 있다면 공유 프로젝트를 진행하는 것이 좋습니다. 일반적으로 더 유연하고 강력합니다. 사전에 요구 사항을 알고 PCL이 요구 사항을 충족시킬 수 있다면 해당 경로로 이동할 수도 있습니다. 또한 PCL은 플랫폼 별 코드를 작성할 수 없도록하여보다 명확한 분리를 시행합니다 (처음에는 공유 어셈블리에 배치하기에 적합하지 않을 수 있음).

두 플랫폼의 주요 초점은 여러 플랫폼을 대상으로 할 때입니다. 그렇지 않으면 일반적으로 일반 라이브러리 / dll 프로젝트 만 사용합니다.


9

VS 2015에서 간결하게

공유 프로젝트를 사용하면 여러 프로젝트 유형에서 코드, 자산 및 리소스를 공유 할 수 있습니다. 보다 구체적으로, 다음 프로젝트 유형은 공유 프로젝트를 참조하고 사용할 수 있습니다.

  • 콘솔, Windows Forms 및 Windows Presentation Foundation
  • Windows Store 8.1 앱 및 Windows Phone 8.1 앱
  • Windows Phone 8.0 / 8.1 Silverlight 앱.
  • 휴대용 클래스 라이브러리.

참고 :-공유 프로젝트와 PCL (Portable Class Library) 모두 공유 코드, XAML 리소스 및 자산을 허용하지만 물론 다음과 같이 요약 될 수있는 몇 가지 차이점이 있습니다.

  • 공유 프로젝트는 재사용 가능한 어셈블리를 생성하지 않으므로 솔루션 내에서만 사용할 수 있습니다.
  • 공유 프로젝트는 코드가 실행중인 플랫폼을 감지하는 데 사용할 수있는 WINDOWS_PHONE_APP 및 WINDOWS_APP와 같은 환경 변수를 지원하므로 플랫폼 별 코드를 지원합니다.
  • 마지막으로 공유 프로젝트는 타사 라이브러리에 종속 될 수 없습니다.
  • 이에 비해 PCL은 재사용 가능한 .dll 라이브러리를 생성하며 타사 라이브러리에 종속 될 수 있지만 플랫폼 환경 변수는 지원하지 않습니다.

7

클래스 라이브러리 는 컴파일 된 코드를 공유합니다.

공유 프로젝트 는 공유 소스 코드입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.