2011-05-13 3 views
4

일부 T4 템플릿을 CodeTemplates 디렉토리에 전달하는 NuGet 패키지를 빌드하고 있습니다. NuGet 패키지를 설치하면 T4 템플릿에는 모두 "TextTemplatingFileGenerator"로 설정된 사용자 정의 도구 속성이 있습니다. 이것은 옳지 않습니다.NuGet - T4 설치된 후 파일 등록 정보가 다릅니다.

새 T4 템플릿이 이런 식으로 추가되지 않도록 레지스트리를 변경하여이 기능을 비활성화 할 수 있지만 이것이 NuGet 패키지이므로 옵션이 아닙니다.

PowerShell을 살펴본 결과 목표를 달성하기 위해 무엇을해야하는지 이해하는 데 어려움이 있습니다.

나는 .csproj 파일 XML 보았다이를 발견했습니다

<None Include="CodeTemplates\AddController\Controller.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <LastGenOutput>Controller.cs</LastGenOutput> 
</None> 

나는이 노드에서 "TextTemplatingFileGenerator"를 제거하면, 내가 원하는대로 다음 파일이 작동합니다.

여기에서 어디로 가야합니까?

답변

4

나는 이것을 할 수있는 좋은 방법이 있는지 확신하지 못합니다. 블로그 포스트에서 David Ebbo wrote :이 모델에 대해 언급 것이다

마지막 한가지는 .TT 파일은 일반적으로 프로젝트의 일부 되지 않는 것입니다. 대신, 은 다른 곳에 있으며, 그 출력 만 프로젝트의 일부가됩니다. 당신이 정말로 그것을 자체에서 실행 싶지 않기 때문에 음, 기술적으로 .TT 파일 (그런 다음 'TextTemplatingFileGenerator'사용자 정의 도구를 제거해야 쉽게 편집 할 프로젝트의 될 수 있지만, 그것은 이 사용자 정의 호스트에서 실패 할 것입니다.)

이렇게하면 .tt 파일이 프로젝트에 추가 될 때 Visual Studio 동작처럼 들립니다.

즉, Scott Hanselman's AddMvc3ToWebForms은 MVC 기능 (컨트롤러 추가 /보기 추가 등)을 추가하기 위해 csproj 파일에서 GUID를 일부 변경하므로 해당 코드와 비슷한 작업을 수행하고 Generator 섹션을 제거 할 수 있습니다. 패키지 파일을 열고 프로젝트를 다시로드 하시겠습니까?

+0

, 그러나 이것은 정말 내 문제를 해결하지 않습니다 같은

귀하의 install.ps1이 보일 것입니다. T4 템플릿을 프로젝트의 일부로 유지하려고합니다. 이것이 MVC의 기본보기 및 컨트롤러 템플릿을 재정의하는 유일한 방법입니다. 게다가 프로젝트 외의 다른 템플릿도 있습니다. –

+0

당신이 원하는대로 할 수있는 좋은 방법이 없다고 생각합니다. VS를 자동화 한 후에 유형을 변경 한 다음에는 부족합니다. AddMvc3ToWebForms 패키지는 프로젝트 파일을 manupilize하여 GUID를 변경합니다. 추가 한 각 파일에 대해 사용자 지정 도구를 비슷한 방식으로 변경할 수 있습니까? –

+0

그래, 아마 그럴거야. 나는 누군가가 그 일을 도울 수 있기를 바랬다. –

2

나는 동일한 문제가 있었고, "install.ps1"을 사용하여 해결했습니다. 이것은 "nuget"패키지가 설치되거나 업데이트 될 때마다 실행됩니다. 당신이 주제에 대한 몇 가지 지식을 가지고처럼 소리

param($installPath, $toolsPath, $package, $project) 

$addControllerFolder = $project.ProjectItems.Item("CodeTemplates").ProjectItems.Item("AddController") 

$addControllerFolder.ProjectItems.Item("Controller.tt").Properties.Item("CustomTool").Value = "" 
+1

나는이 문제를 수년간 다루지 않았기 때문에 이것을 시도하지는 못했지만 누군가가 일할 수도있는 무언가를 따라 왔기 때문에 기쁩니다. 이것은 좌절시키는 문제였습니다. –