2011-01-12 5 views
1

내 솔루션에는 두 개의 프로젝트가 있습니다. Project1의 enum1에서 project2의 enum2 값을 복사해야합니다. T4를 사용하면 가능합니까?프로젝트 간 T4 복사 열거 형

편집

은 내 상황을 조금 더 설명하겠습니다. enum1이있는 project1은 도구에 의해 생성됩니다. 대부분 데이터베이스와 테이블 이름의 열거 형에서 생성 된 엔티티가 있습니다. 이 프로젝트 1은 서버 측에서 데이터베이스와 상호 작용하는 데 사용됩니다. 서버 측은 WCF를 통해 클라이언트 측과 통신합니다. 별거의 문제로 WCF를 통해 내 프로젝트 1을 공유하고 싶지 않습니다. 하지만 엔티티 이름이있는이 열거 형이 있습니다. 클라이언트 측의 엔티티 이름을 사용하여 일부 작업을 일반화합니다. 예를 들어 WCF (클라이언트 -> 서버)에서 값을 보내고 엔터티 이름을 사용하여 해당 엔터티에 값을 매핑합니다.

+1

왜 그렇게해야합니까? 당신은 한 곳에서 선언하고 싶지 않으십니까? (세 번째 프로젝트) 다른 두 부분을 참조 하시겠습니까? 두 개의 서로 다른 프로젝트에서 똑같은 열거 형을 정의하면이 두 열거 형을 섞어서 사용할 수 없으며 여전히 서로 다른 유형으로 간주됩니다. –

+0

@Lasse V. Karlsen이 말한 바. – leppie

+0

몇 가지 추가 정보 대신 답변이 추가되었습니다. –

답변

4

우선, 하나의 프로젝트에서 열거 형을 읽고 다른 프로젝트에 열거하는 T4 템플릿을 만들 수 있습니다.

그러나 아마도 그렇게하고 싶지는 않을 것입니다.

그러나 더 쉬운 방법이 있습니다. 원본 enum 파일을 두 번째 프로젝트의 링크로 추가하기 만하면됩니다. 링크를 추가하면 실제로 파일 사본을 만들지 않고 다른 프로젝트의 링크로 다시 연결하기 만하면 T4를 사용할 필요가 없습니다. 그러나 이것은 어떤 방식 으로든 프로세스의 열거 형을 변경하고 싶지 않다고 가정합니다.

링크를 추가하려면 기존 항목 추가를 클릭하고 원래 열거 파일로 이동하십시오.하지만 추가 버튼에는 링크 메뉴 항목이있는 작은 드롭 다운 메뉴가 있습니다. 이를 사용하면 새 파일에 솔루션 탐색기의 아이콘에 작은 링크 기호가 겹쳐져 링크임을 나타냅니다.

그러나 내가 원하지 않는 이유는 전체 프로젝트를 한 프로젝트에서 다른 프로젝트로 복사하더라도 두 열거 형이 같은 유형이 아니기 때문입니다.

즉, 프로젝트 B에서 열거 형을 사용하도록 선언 된 프로젝트 B에서 코드를 호출 할 때 프로젝트 A의 열거 형을 사용하여 한 프로젝트의 코드를 호출해야하는 경우 다른 유형. 어셈블리는 유형의 ID의 일부입니다.

이렇게하려면 프로젝트 A (또는 B)에서 열거 형을 선언하고 다른 프로젝트에서 해당 프로젝트를 참조하거나 세 번째 프로젝트에서 선언 한 다음 세 번째 프로젝트를 두 가지 모두에서 참조해야합니다 A와 B

+0

내 게시물을 참조하십시오. 추가 정보가 있습니다. – user137348

0

템플릿을 만들어 한 프로젝트에서 파일을 읽고 tt가 들어있는 프로젝트에 작성할 수 있습니다. 동일한 지점에서 두 프로젝트를 모두 사용하려는 경우 유형의 네임 스페이스를 변경하는 것을 잊지 마십시오.

TT를 :

<#@ template hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ import namespace="System.IO" #> 
<#@ output extension=".cs" #> 

<#    
var [email protected]"..\Domain.Model\MyEnum.cs"; 
path = this.Host.ResolvePath(path); 

var content = File.ReadAllText(path); 

// mental note: learn regex once for all¡¡¡ 
content=content.Replace("namespace Domain.Model", "namespace Domain.Dtos"); #> 

<#=content#>