2011-05-10 4 views
23

.tt 파일에서 code.VsNamespaceSuggestion()이 네임 스페이스를 가져 오는 위치를 알고있는 사람이 있습니까?T4 생성 : VsNamespaceSuggestion()은 어디에서 가져 오나요?

솔루션의 네임 스페이스를 변경해야하는 문제가 있습니다. 폴더 이름, 파일 이름, 프로젝트 이름, 프로젝트 속성, 어셈블리 정보 등 모든 곳에서 변경했음을 맹세합니다. 그러나 .tt 파일이 실행되면 항상 생성 된 클래스에 이전 네임 스페이스를 다시 넣습니다. EF 모델에서 온다고 들었지만, 네임 스페이스 (디자이너/속성 또는 메모장에서 .edmx 파일 열기)를 보여주는 것은 아무것도 없습니다.

의견이 있으십니까? 해킹의 경우 다음 줄에서 원하는 네임 스페이스로 재정의하는 것입니다.

string namespaceName = code.VsNamespaceSuggestion(); 
namespaceName = "Desired.Namespace"; //HACK: 

답변

1

문제가 해결 된 것 같습니다. sra의 코멘트가 끝난 후에 모든 프로젝트의 기본 네임 스페이스를 다시 확인했지만 모든 것이 실제로 정확했습니다.

"파일에서 모두 찾기"가 아무 것도 표시하지 않았습니다. Agent Ransack이라는 무료 도구를 조금 사용했는데 이전의 네임 스페이스가있는 이라는 태그가있는 .csproj 파일을 발견했습니다. 나는 그것을 바꿨고, 그게 바로 그것을 고쳤다.

AR은 또한 많은 bin/Debug 파일 (abosluteFileList 및 cache 파일)에서 이전 네임 스페이스를 발견했습니다. 나는 그 파일들을 모두 지우고 새로운 네임 스페이스로 다시 생성 될 것이다. 그게 효과가 있는지 나는 모른다.

아아 또한 내 .suo 파일에서 인스턴스를 발견했습니다. 문제가 수정 된 것 같아서 파일을 삭제하지 않았습니다 (불행히도 메모장에서 편집 할 수 없습니다).

54

이 정확한 문제가 있었지만 발견 한 해결책은 여기에 언급되지 않았으므로 검색 할 때이 기사를 읽은 사람을 도울 것이라고 생각했습니다.

엔티티를 생성하는 코드 생성 * .tt 파일을 클릭하십시오. 속성 창에서 사용자 지정 도구 네임 스페이스를 생성 할 네임 스페이스로 설정합니다. T4가 기본 프로젝트 네임 스페이스 + 폴더 계층 구조에서 네임 스페이스를 생성하고있었습니다.

+3

감사 .:! –

+8

+1 멋진 솔루션! 대답을 받아 들여야한다. – Seph

3

Visual Studio의 T4 호스트는 CallContext 속성 봉투에서 "NamespaceHint"이름을 사용하여 이것을 가져옵니다.

이 값은 프로젝트 기본 네임 스페이스와 프로젝트 루트에서 tt 파일까지의 경로에서 파생 된 사용자 지정 도구에 지정된 기본 네임 스페이스를 사용하는 표준 T4 사용자 지정 도구 (SingleFileGenerator) 메커니즘으로 채워집니다. 사용자 정의 도구 사양 아래의 속성 표에 명시 적으로 지정됨 (@mattkab이 답변에서 말한 것처럼)

코드에서 T4 서비스를 사용하는 경우 CallContext를 직접 설정하여이 항목을 채울 수 있습니다.

2

그냥 이미지를 다음과 같은 * .TT 파일의 속성을 수정하고, 효과는 즉시 그 정보에 대한

Default is empty

관련 문제