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
일반 코드를 포함하는 별도의 클래스 라이브러리 프로젝트를 만들기만 하면 됩니다.이를 사용하는 솔루션의 일부일 필요는 없습니다.필요한 프로젝트에서 클래스 라이브러리를 참조합니다.
유일한 요령은 프로젝트를 참조하는 솔루션의 일부가 아니기 때문에 프로젝트를 참조하는 데 파일 참조를 사용해야 한다는 것입니다.즉, 실제 출력 어셈블리를 참조하는 프로젝트를 빌드하는 모든 사용자가 액세스할 수 있는 위치에 실제 출력 어셈블리를 배치해야 합니다.이 작업은 예를 들어 어셈블리를 공유에 배치하여 수행할 수 있습니다.
클래스 라이브러리 프로젝트에 공통 코드를 추출하고 해당 클래스 라이브러리 프로젝트를 솔루션에 추가합니다.그런 다음 해당 클래스 라이브러리에 프로젝트 참조를 추가하여 다른 프로젝트의 공통 코드에 대한 참조를 추가할 수 있습니다.이진/어셈블리 참조와 달리 프로젝트 참조가 있는 장점은 빌드 구성을 디버그, 릴리스, 사용자 지정 등으로 변경하면 공통 클래스 라이브러리 프로젝트도 해당 구성을 기반으로 빌드된다는 것입니다.
둘 이상의 솔루션에 동일한 프로젝트를 포함할 수 있지만, 향후 문제가 발생할 수 있습니다(예를 들어 디렉토리를 이동할 때 상대 경로가 무효화될 수 있음).
수년간의 노력 끝에 마침내 실행 가능한 해결책을 찾았지만 소스 제어를 위해 서브버전을 사용해야 합니다(나쁜 것은 아닙니다).
솔루션의 디렉터리 수준에서 솔루션에 포함할 프로젝트를 가리키는 svn:externals 속성을 추가합니다.하위 버전은 저장소에서 프로젝트를 가져와 솔루션 파일의 하위 폴더에 저장합니다.솔루션 파일은 단순히 상대 경로를 사용하여 프로젝트를 참조할 수 있습니다.
제가 시간이 좀 더 나면, 이것에 대해 자세히 설명하겠습니다.
이제 공유 프로젝트를 사용할 수 있습니다.
공유 프로젝트는 여러 애플리케이션 간에 공통 코드를 공유하는 좋은 방법입니다. 이미 Windows 8.1 Universal App Development의 일부로 Visual Studio 2013의 공유 프로젝트 유형을 사용했지만 Visual Studio 2015에서는 독립 실행형 새 프로젝트 템플릿으로 콘솔, 데스크톱, 등의 다른 유형의 앱과 함께 사용할 수 있습니다.전화, 앱 저장 등.이러한 유형의 프로젝트는 단일 플랫폼 내에서 여러 애플리케이션 간에 공통 코드, 논리 및 구성 요소를 공유하고자 할 때 매우 유용합니다.또한 플랫폼별 API, 자산 등에 액세스할 수 있습니다.
자세한 내용은 이것을 확인하십시오.
모든 공통 기능을 포함하는 dll 클래스 라이브러리를 만드는 것이 좋습니다.각 솔루션은 다른 솔루션에 관계없이 이 DLL을 독립적으로 참조할 수 있습니다.
사실, 이것이 제 작업에서 우리의 출처가 구성되는 방식입니다(그리고 저는 다른 많은 곳을 믿습니다).
그런데, 솔루션은 명시적으로 다른 솔루션에 의존할 수 없습니다.
서로 다른 두 프로젝트 유형(예: 데스크톱 프로젝트 및 모바일 프로젝트) 간에 코드를 공유하려는 경우 공유 솔루션 폴더를 조사할 수 있습니다.모바일과 데스크톱 프로젝트 모두 하나의 파일에만 있는 동일한 클래스가 필요하기 때문에 현재 프로젝트에 대해 그렇게 해야 합니다.이 경로로 이동하면 파일이 연결된 모든 프로젝트에서 파일을 변경할 수 있으며 이러한 변경 사항에 대해 모든 프로젝트가 재구성됩니다.
관련된 두 가지 주요 단계는 다음과 같습니다.
1 - C++ dll 만들기
비주얼 스튜디오에서
New->Project->Class Library in c++ template. Name of project here is first_dll in
visual studio 2010. Now declare your function as public in first_dll.h file and
write the code in first_dll.cpp file as shown below.
헤더 파일 코드
// first_dll.h
using namespace System;
namespace first_dll
{
public ref class Class1
{
public:
static double sum(int ,int );
// TODO: Add your methods for this class here.
};
}
Cpp 파일
//first_dll.cpp
#include "stdafx.h"
#include "first_dll.h"
namespace first_dll
{
double Class1:: sum(int x,int y)
{
return x+y;
}
}
선택 항목
**Project-> Properties -> Configuration/General -> Configuration Type**
이 옵션은 Dynamic Library(.dll)여야 하며 지금 솔루션/프로젝트를 참조하십시오.
debug 폴더에 first_dll.dll 파일이 생성됩니다.
2 - C# 프로젝트에서 연계
오픈 C# 프로젝트
Rightclick on project name in solution explorer -> Add -> References -> Browse to path
where first_dll.dll is created and add the file.
C# 프로젝트의 맨 위에 이 줄 추가
Using first_dll;
이제 dll의 함수는 일부 함수의 아래 문을 사용하여 액세스할 수 있습니다.
double var = Class1.sum(4,5);
저는 VS2010에서 c++ 프로젝트에 dll을 생성하여 VS2013 C# 프로젝트에 사용하였습니다.잘 작동합니다.
내부 NuGet 서버를 호스팅하고 내부 및 외부의 다른 프로젝트에서 공유할 공통 라이브러리를 공유할 수 있습니다.
이 읽기에 대해 자세히 설명합니다.
여러 프로젝트에서 코드를 재사용할 때 "기존 파일 링크 추가"를 사용하는 경우가 매우 좋습니다. 이 경우 종속 라이브러리의 다른 버전을 참조하고 지원해야 합니다.
다른 외부 어셈블리에 대한 참조를 사용하여 여러 어셈블리를 만드는 것은 코드를 복제하거나 소스 코드 제어를 사용하여 트릭을 사용하지 않고는 쉽지 않습니다.
개발 및 유닛 테스트를 위해 하나의 프로젝트를 유지한 다음, 외부 어셈블리의 다른 버전을 참조하는 어셈블리를 만들어야 할 때 기존 파일 링크를 사용하여 '빌드' 프로젝트를 만드는 것이 가장 쉽다고 생각합니다.
Visual Studio 2015 기준으로 모든 코드를 하나의 솔루션에 보관하면 공유 프로젝트를 추가하여 코드를 공유할 수 있습니다.그런 다음 코드를 사용할 각 프로젝트에 대해 이 공유 프로젝트에 대한 참조와 적절한 사용 지침을 추가합니다.
한 프로젝트의 클래스 파일을 다른 프로젝트에 포함하는 한 가지 간단한 방법은 기존 솔루션에 프로젝트를 추가한 다음 기존 프로젝트에 새 프로젝트의 DLL 참조를 추가하는 것입니다.마지막으로 임의 클래스의 맨 위에 있는 지시문을 사용하여 호출을 해제하여 추가된 클래스의 메서드를 사용할 수 있습니다.
여러 솔루션에 프로젝트를 포함시키는 것은 정말 나쁜 생각입니다.
예를 들어 당신에게Shared
class lib 프로젝트는 둘 다에 포함되어 있습니다.SolutionA
그리고.SolutionB
.
이제 당신이 일을 하고 있다면 어떻게 될까요?SolutionA
그리고 획기적인 변화를 만듭니다.Shared
그러면 다음에서 빌드 오류가 발생합니다.SolutionA
아마 쉽게 고칠 수 있을 거예요 하지만 당신은 당신이 실제로 무언가를 부순 것을 알아차리지 못할 거예요SolutionB
빌드 서버에서 알려줄 수도 있지만 너무 늦었습니다.코드를 누르기 전에 알아야 합니다.
좋은 해결책은 두 가지뿐입니다.
- 만들다
Shared
실제로 공유하고 semver를 사용하여 변경사항을 깨는 영향을 제어할 수 있는 nugget 패키지입니다.이렇게 하면 원하지 않는 오버헤드가 발생할 수 있습니다. - 다음을 포함하는 단일 솔루션 생성
Shared
그리고 모든 의존적인 프로젝트들.SolutonA
그리고.SolutionB
다음에 따라 관련 없는 프로젝트가 많은 경우Shared
그러면 이것이 최선의 해결책이 아닐 수도 있고 그런 다음 너겟 접근법을 따라야 합니다.
언급URL : https://stackoverflow.com/questions/1116465/how-do-you-share-code-between-projects-solutions-in-visual-studio
'programing' 카테고리의 다른 글
비어 있지 않은 디렉터리 제거 (0) | 2023.05.16 |
---|---|
MVVM Light Toolkit 샘플 (0) | 2023.05.16 |
Git의 사인 오프 기능은 무엇을 위한 것입니까? (0) | 2023.05.16 |
jQuery or Selector? (0) | 2023.05.16 |
Postgre의 계산된/계산된/가상/파생 열SQL (0) | 2023.05.16 |