2012-07-23 1 views
4

내 응용 프로그램 내에 .NET 3.5 및 .NET 4.0에서 사용할 수있는 일부 핵심 라이브러리를 만들어야합니다. 여러 개의 프로젝트를 만들고, 필요한 정의를 만들고, #ifdef을 사용하여 어떤 코드가 어떤 출력 어셈블리에 들어가는 지 제어하게되어 기쁩니다.여러 .NET 버전에서 프로젝트를 동기화 유지

그러나 이러한 프로젝트를 동기화하는 방법이 있다면 내가 알고 싶은 것은 무엇입니까? XNA에서 개발할 때 Windows 빌드 및 Windows Phone 빌드가 있고 XNA는 XnaCrossPlatformGroupID이라는 프로젝트 파일에 속성을 삽입합니다. Visual Studio에서 파일을 프로젝트에 추가하면 해당 프로젝트에 자동으로 추가됩니다. 예를 들어 Foo.cs이라는 파일을 내 프로젝트의 Windows 복사본에 추가하면 프로젝트의 Windows Phone 복사본에 동일한 파일이 추가됩니다.

Visual Studio 내에서 정상적인 프로젝트 집합에 대해 이러한 종류의 동작을 복제 할 수있는 방법이 있습니까? IDE (예를 들어 TeamCity와 같은 것) 외부의 도구를 사용하지 않고 모든 대상 플랫폼을 한 번에 컴파일 할 수 있기를 원하기 때문에 빌드 구성을 사용하지 않는 것이 좋습니다. 또는 20 가지 빌드 구성으로 솔루션을 페어링하지 않고 여러 대상에 대해 프로젝트를 빌드 할 수있는 다른 방법이 있습니까?

답변

7

내가 할 것은 :

  • 내가 내 dev에 대부분 사용 하나 "일반"csproj 등 파일을 추가가 -하지만 기억이 정말 모든 파일이
  • "의"입니다 즉 기본적으로 "링크로 추가"과 동일 (, B를

    <ItemGroup> 
        <Compile Include="..\Foo\**\*.cs" /> 
    </ItemGroup> 
    

: 다른 csproj를 들어, 같은 것을 사용 ut 단위로 수행 할 필요없이).

모든 * .cs 파일을 재귀 적으로 포함하므로 파일 유지 관리가 필요 없습니다. Portable Class Library를 사용


하면 여러에게 프레임 워크 (오히려 여러보다 버전), 그 다음 또 다른 옵션이 될 수를 목표로하려고 한 경우. 이것은 여러 프레임 워크에서 작동하는 단일 프로젝트이며 이지만은 대상 플랫폼의 기능 중 엄격한 교차로로 제한됩니다. VS2010에서 이것은 추가 기능입니다. VS 11에 기본적으로 포함되어 있습니다.

+0

재귀 적으로 포함되는 것은 멋지지만 - 내가 본 한 가지 단점은 일부 파일이 누락되었다고해도 솔루션 탐색기에서 쉽게 볼 수 없다는 것입니다. 휴대용 클래스 라이브러리 비트도 시도했지만 너무 제한적이어서 특정 파일이 플랫폼간에 변경 될 때 도움이되지 않습니다. 또한 Android 및 iOS (MonoDroid 및 MonoTouch 사용)에서 내 코드를 컴파일해야합니다. – Ani

+0

@ananthonline 4 년 동안 protobuf-net에서 재귀적인 것을 사용 해왔다. 문제가 생기지 않았다. –

+0

나는 * * 사랑한다. 휴대용 클래스 라이브러리에 대해 읽었지 만 여러 .NET Framework 버전을 대상으로 사용할 수 있습니까? 나는 프레임 워크 버전보다는 플랫폼 전반에서 이식성을 목표로 삼는 것처럼 보였기 때문에 나는 조금 절름발이 였고 시도하지 않았다. –

0

크로스 플랫폼 프로젝트에서 수행하는 작업은 각각 하나의 플랫폼에 대해 서로 다른 slns를 갖는 것입니다.

공유 코드는 공통 위치에 있으며 올바른 csproj에 "링크"로 추가됩니다. 이 csproj에는 플랫폼 특정 파일도 포함되어 있습니다. "공통 코드"파일이 현재 플랫폼을 기반으로 조건부 여야하는 경우 두 플랫폼 특정 파일로 바꾸거나 #ifdef를 넣을 수 있습니다 (차이점에 따라 다름).

하나의 솔루션을 Visual Studio 내 다른 솔루션에 추가 할 수도 있습니다. 이 "결합 된"솔루션은 모든 플랫폼의 자동화 된 빌드에 사용할 수 있습니다.

예 : https://github.com/ananthonline/graffiti

이 YMMV, 나를 위해 잘 작동합니다. 희망이 도움이됩니다.

+0

이것은 실제로 프로젝트에 파일을 추가해야 함을 의미합니까?) 그런 다음 프로젝트 b)에 링크로 추가하십시오. 그게 정확히 내가 피하려고했던 시나리오이기 때문에 ... –

+0

두 프로젝트 모두에 대한 링크로 수동으로 추가합니다. 파일 수가 너무 많지 않으므로이 작업을 수행 할 수 있습니다. 나중에 파일 수가 증가하면 Marc Gravell의 방법을 고려할 수 있습니다. – Ani

관련 문제