programing

Visual Studio에서 프로젝트/솔루션 간에 코드를 공유하는 방법은 무엇입니까?

muds 2023. 5. 16. 23:12
반응형

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 참조를 추가하는 것입니다.마지막으로 임의 클래스의 맨 위에 있는 지시문을 사용하여 호출을 해제하여 추가된 클래스의 메서드를 사용할 수 있습니다.

여러 솔루션에 프로젝트를 포함시키는 것은 정말 나쁜 생각입니다.

예를 들어 당신에게Sharedclass 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

반응형