2012-06-20 1 views
2

최근에 DeploymentItem을 처리 할 때 몇 가지 모발을 잃어 버렸습니다.MSTest : 공통 디렉터리에서 항목을 배포하는 현명한 방법은 무엇입니까?

우리는 네이티브 dll에 대한 몇 가지 공통 디렉토리를 가지고 있으며, 많은 테스트는 이것들에 달려 있습니다.

C++ 프로젝트의 경우 이러한 경로가 정의 된 propertypages를 사용합니다. C# 프로젝트에서도 가져올 수 있으며, 일부 수동 편집 (MSBuild 파일)이 포함되어 있습니다. 아직도 나는 테스트에서 그것들을 활용하는 방법을 알 수 없다.

불행히도 DeploymentItemAttribute는 시트의 속성을 사용할 수 없지만 환경 변수를 사용할 수 있습니다. 모든 사람들이 지구 환경 변수를 정의하도록 강요하는 것을 피하기를 희망했다. ...

나는 그물 주위에 다양한 제안을 보았지만 간단한 해결책을 찾지 못했다.

아무에게도 좋은 접근 방법이 있습니까?

+0

이러한 "공통 디렉토리"는 다른 모든 자원 (즉, 소스 트리)에 대한 알려진 상대 경로에 존재할 수 없습니까? 그것이 내가하는 방법입니다. 빌드가 외부 결함없이 체크 아웃/빌드/테스트 할 수 있다고 가정하면 소스 트리에 네이티브 종속성을 유지해야합니다. –

+0

불행히도 그것은 작동하지 않습니다. 그 이유 중 하나는 TeamCity를 사용하여 구축하는 것입니다. TC는 소스 트리를 체크 아웃 할 위치를 결정합니다. – Oyvind

+0

소스 트리를 어디에서 체크 아웃해도 상관 없습니다. 의존성이 모두 소스 트리 내부에 있고 배포 항목이 모두 상대 경로를 사용하는 경우 어떻게됩니까? –

답변

2

앤더스 '대답은 좋은 해결책이지만, 내 경우 :

  1. 나는
  2. 많은 DLL을 특정 버전을 해달라고, 그리고 그들이 소스 트리 내에서 바이너리를 유지의 아이디어를 좋아하지 않는다 일반 기준으로 업데이트되었습니다.

어떻게 든이 솔루션 결국 :

첫째, 나는 테스트 프로젝트로 글로벌 VC++ 속성 페이지를 포함. 이것은 위의 <Project> 태그 아래에이 지시문을 추가하여 수동으로 수행해야합니다.csproj :

<Import Project="$(UserProfile)\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props" />

나는 지금 내 C++ 환경에서 DLL 경로를 정의하는 속성/매크로에 대한 액세스 권한을 얻었다. 그때

  1. 테스트 프로젝트에 새 하위 폴더를 추가

  2. "NativeDlls"
  3. 링크는 절대있는 NativeDlls 폴더에 링크로 필요한 DLL을 추가 말하지만, 교체 할 수 있습니다 속성 시트에서 매크로는 위의 포함 :

<Content Include="$(MyLibLocation)\GDAL18BIN\gdal18.dll">

,536 앤더스는 언급으로,

[TestMethod] 
[DeploymentItem(@"NativeDlls")] 
public void TestSomeStuff() 
{ 
} 

을 그리고 :

<Link>NativeDlls\mylib.dll</Link>

<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

</Content>

DLL을 배포 할 다음 준비가 나머지 작업은 디버그/릴리즈 32를 설정하는 것입니다/64 조건.

1

이 프로젝트에서만 사용하는 외부 종속성 인 경우 (소스 트리간에 공유되지 않음) 소스 제어로 이동하는 것이 좋습니다. 종속성은 소스와 함께 버전을 지정해야합니다. 그 이유는 소스 트리의 개정판 (역사의 개정판)을 체크 아웃 할 수 있어야하고 빌드해야한다는 것입니다. 소스 제어에서 이 아닌 이진 종속성이있는 경우 특정 버전의 원본을 빌드 할 때 필요한 종속성 버전을 확인하는 데 문제가 있습니다.

종속성을 소스 트리 (예 : $ svnroot/trunk/dependencies)로 이동할 수있는 경우 상대 경로 만 사용하여 테스트 배포를 사용할 수 있습니다. TeamCity 및 모든 개발자 컴퓨터에서 작동합니다.

종속성을 버전화 할 수 없거나 다른 이유로 인해 저장소 외부에 있어야하는 경우 테스트 배치에서 사용할 수있는 환경 변수를 사용할 수 있습니다. This msdn post for an example

편집을 참조하십시오 소스 트리 아래에있는 lib 디렉토리의 (에 대한 예 참조 : 난 그냥 DLL에 프로젝트에서 DLL 참조를 csprojs은 여기

바이너리 의존성 관리에 대한 코멘트를 옮겼습니다. . \ lib \ log4net.dll). 개별 빌드를 위해 별도의 libs를 참조하려는 경우 (예 : x86/64 또는 Debug/Release와는 다른 VS가 지원하지만 VS는 MsBuild와 csproj 파일을 지원하므로 조건부 참조를 추가 할 수 있지만 csproj 파일을 손으로 편집해야 플랫폼과 같은 경우에만 x86 종속성을 포함해야합니다 x86 등입니다.