는 [나는 내가 찾은 답을 반영하기 위해 제목을 업데이트하지만, 변경되지 않은 질문 텍스트 떠날거야]이 기본적으로 How to output namespace in T4 templates?과 같은 질문자동으로 사전 생성 뷰
을하지만, 모든 답변 Visual Studio 호스트에 대한 액세스가 필요합니다. GradthJ의 대답에 Brad Wilson이 언급 했으므로이 답변은 Visualization and Modeling SDK을 통해 MSBuild 호스트에서 작동하지 않습니다.
최종 목표는 미리 생성 된보기를 edmx 파일에 추가하는 것입니다. VS에는 foo.edmx에서 foo.tt 및 foo.Context.tt 로의 하드 코딩 된 내부 연결이있는 것 같습니다. 프로젝트 파일에서 < DependentUpon> foo.edmx 임에도 불구하고 foo.edmx를 변경해도 foo.Views.tt가 해당 변환을 실행하지 않습니다.
V & M SDK를 사용하면 부모가 변경 될 때 종속 텍스트 변환이 실행되지만 모든 네임 스페이스는 엔티티 클래스 파일에서 제거됩니다. EF.Utility.CS.ttinclude는 namespaceHint가 없으면 null 네임 스페이스를 반환하고 VS 호스트를 사용합니다. MSBuild 프로젝트에서 $ (DevEnvDir)에 대한 종속성을 원하지 않기 때문에 EF.Utility.CS.ttinclude를 소스 제어 폴더에 복사했으며 MSBuild 변환 호스트에 맞게 변경했습니다.
CallContext.LogicalGetData("NamespaceHint")
또는 Host.ResolveParameterValue("", "", "namespaceHint")
에 의해 반환 된 동일한 문자열을 검색하려고합니다. 현재 계획에는 $ (RootNamespace) 및 $ (ProjectDir)을 < T4ParameterValues>를 통해 전달하고 ResolveParameterValue를 사용하여 t4에서 검색 한 다음 ProjectDir을 기준으로 .tt 파일의 디렉터리를 가져 와서 슬래시를 마침표로 변환 한 다음 RootNamespace로 연결합니다. 추악하지만 이론적으로는 효과가있을 것입니다.
나는 다음 중 하나를 찾고 있어요 :
- 방법을 V & M SDK, 더 간단하게보다 위에 설명 된 연결을 통해 비주얼 스튜디오의 NamespaceHint와 같은 값을 검색 할 수 있습니다.
- V 자 & M의 SDK
- V 자에 의해 처리되는 foo.tt foo.Context.tt 및 배제 방법을 사용하지 않고 foo.edmx 및 foo.arbitrary.tt간에 적절한 종속성을 설정하는 방법 & M SDK는 VS의 기본 제공 엔티티 프레임 워크 도구로 계속 처리됩니다.
어느 쪽이든 이전보다 약간 더 좋을 수도 있지만 지금까지 내 연구에 따르면 가능하지 않다는 것을 나타냅니다. 내 현재 접근 방식은 텍스트 변환을 두 번 실행합니다. VS가 edmx 처리를 하드 코드 한 다음 V & M SDK가 일반 tt 처리를 수행합니다. 나는 그 중 하나에 대해 정말 좋은 대답을 얻으면 나는 후손에 대한 질문 제목을 바꿀 것이다. Getting the namespace for an edmx in a T4 template
흥미 롭습니다. "/// edmx 파일 찾기"로직을 미리 생성 된 뷰 템플릿에서 제거하고 명시 적으로 edmx를 지정해야하는 것처럼 들립니다. – Timbo
이 방법이 작동하는지 확인합니다. 이제 edmx 처리 만 소스 제어에 제대로 연결됩니다. – Timbo
@Timbo - 네, 그렇게 할 수는 있지만 전체 경로 (여전히 작동해야 함)를 지정해야 할 수도 있습니다. – Pawel