공통 코드가있는 두 가지 솔루션이 있으므로 추출하여 서로 공유하고 싶습니다. 또한 다른 사람들에게 유용 할 수 있기 때문에 해당 라이브러리를 독립적으로 릴리스 할 수 있기를 원합니다.
- 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
위와 같이 '가상 기존 항목'폴더에서 항목을 추가하거나 제거하면 파일을 숨기거나 와일드 카드 포함이 확장되지 않도록하려면 .
<Import
솔루션을 다시로드 할 때까지 .csproj 파일에 .targets 파일 등 이 캐시 된다는 것입니다.
공통 코드를 포함 할 별도의 클래스 라이브러리 프로젝트를 작성하기 만하면됩니다. 이를 사용하는 솔루션의 일부일 필요는 없습니다. 필요한 모든 프로젝트에서 클래스 라이브러리를 참조하십시오.
유일한 트릭은 프로젝트를 참조하는 솔루션의 일부가 아니기 때문에 프로젝트를 참조하기 위해 파일 참조를 사용해야한다는 것입니다. 즉, 실제 출력 어셈블리는이를 참조하는 프로젝트를 작성하는 모든 사람이 액세스 할 수있는 위치에 배치해야합니다. 예를 들어 어셈블리를 공유에 배치하면됩니다.
둘 이상의 솔루션에 동일한 프로젝트를 포함시킬 수 있지만 언젠가는 문제가 발생할 수 있습니다 (예 : 디렉토리를 이동할 때 상대 경로가 유효하지 않을 수 있음)
수년간의 어려움을 겪은 후에 마침내 실행 가능한 솔루션을 찾았지만 소스 제어를 위해 Subversion을 사용해야합니다 (나쁜 것은 아닙니다)
솔루션의 디렉토리 레벨에서 솔루션 에 포함하려는 프로젝트를 가리키는 svn : externals 특성을 추가 하십시오. Subversion은 저장소에서 프로젝트를 가져 와서 솔루션 파일의 하위 폴더에 저장합니다. 솔루션 파일은 단순히 상대 경로를 사용하여 프로젝트를 참조 할 수 있습니다.
시간이 더 있으면 자세히 설명하겠습니다.
svn:externals
저장소 에 대한 하드 링크. 저장소를 이동해도 외부 링크는 여전히 이전 저장소를 가리 킵니다.
관련된 두 가지 주요 단계는
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) 여야하며 솔루션 / 프로젝트를 지금 빌드하십시오.
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 서버를 호스팅하고 내부 및 외부에서 다른 프로젝트에서 공유 할 공통 라이브러리를 공유 할 수 있습니다.
이 읽기에 더
서로 다른 두 가지 프로젝트 유형 (예 : 데스크톱 프로젝트와 모바일 프로젝트)간에 코드를 공유하려는 경우 공유 솔루션 폴더를 살펴볼 수 있습니다 . 모바일 프로젝트와 데스크톱 프로젝트 모두 하나의 파일에있는 동일한 클래스가 필요하므로 현재 프로젝트 에서이 작업을 수행해야합니다. 이 경로로 이동하면 파일이 연결된 프로젝트가 해당 경로를 변경할 수 있으며 모든 프로젝트가 해당 변경 사항에 따라 다시 작성됩니다.
프로젝트 전체에서 코드를 재사용 할 때 "기존 파일 링크 추가"를 사용하는 경우가 매우 좋습니다. 이는 서로 다른 버전의 종속 라이브러리를 참조하고 지원해야하는 경우입니다.
다른 외부 어셈블리를 참조하여 여러 어셈블리를 만드는 것은 코드를 복제하거나 소스 코드 컨트롤을 사용하여 트릭을 사용하지 않으면 쉽게 수행 할 수 없습니다.
개발 및 단위 테스트를 위해 하나의 프로젝트를 유지 관리하고 외부 파일의 다른 버전을 참조하는 어셈블리를 만들어야 할 때 기존 파일 링크를 사용하여 '빌드'프로젝트를 만드는 것이 가장 쉽다고 생각합니다.
VisualStudio 2015부터 모든 코드를 하나의 솔루션으로 유지 하면 공유 프로젝트 를 추가하여 코드를 공유 할 수 있습니다 . 그런 다음 코드를 사용하려는 각 프로젝트에 대한이 공유 프로젝트에 대한 참조와 올바른 사용 지시문을 추가하십시오.
이제 공유 프로젝트를 사용할 수 있습니다
공유 프로젝트는 여러 응용 프로그램에서 공통 코드를 공유하는 좋은 방법입니다. 우리는 이미 Windows 8.1 Universal App Development의 일부로 Visual Studio 2013의 공유 프로젝트 유형에 대해 경험했지만 Visual Studio 2015에서는 독립형 새 프로젝트 템플릿입니다. Console, Desktop, Phone, Store App 등과 같은 다른 유형의 응용 프로그램과 함께 사용할 수 있습니다.이 유형의 프로젝트는 단일 코드에서 여러 응용 프로그램간에 공통 코드, 논리 및 구성 요소를 공유하려는 경우 매우 유용합니다. . 또한 플랫폼 별 API, 자산 등에 액세스 할 수 있습니다.