문제

간단한 템플릿 파일을 작성하려고합니다.

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ include file="T4Toolbox.tt" #>
<#@ property name="ClassName" processor="PropertyProcessor" type="System.String" #>

public class <#= ClassName #>
{
}

Visual Studio의 템플릿을 클릭하면 속성 'ClassName'이 속성 창에 있습니다. 그것이 내가 원하는 것입니다! 거기에 텍스트를 입력하고 빌드하면 다음과 같은 오류가 발생합니다.

 Error  1   Running transformation: System.ArgumentNullException: Value cannot be null.
Parameter name: objectToConvert
   at Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert)
   at Microsoft.VisualStudio.TextTemplating32ED7F6BD49D2C3984C2CB7194792D4B.GeneratedTextTransformation.TransformText() in c:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt:line 6  C:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt    1   1   

바라건대, 내가하고 싶은 일을 볼 수 있기를 바랍니다. 템플릿이 Visual Studio의 속성 창에 설정 한 문자열이있는 클래스가있는 .cs 파일을 뱉어 내기를 바랍니다. 슬프게도, 나는 아주 일찍 단계적으로 실패하고 있습니다 !!

도움이 되었습니까?

해결책

마지막으로 시도했을 때,이 시나리오는 속성 지침의 표준 프로세서가없고 Visual Studio에서는 지원하지 않기 때문에 작동하지 않았습니다. Clarius T4 편집기 가이 지침에 제공 한 제한된 지원을 사용하고있을 수 있습니다. 비슷한 오류가 발생한 것을 기억합니다.

다른 팁

당신은 호출합니다 Initialize() Mehod 먼저 다음과 같이 :

ClassTemplate t = new ClassTemplate();
t.Session = new Dictionary<string, object>();
t.Session["ClassName"] = "Person";

t.Initialize();//This is important.

string output = t.TransformText();
Console.WriteLine(output);

프로젝트를 VS2017로 업그레이드 할 때도 같은 문제가 있었고 2017 년 IDE에 템플릿을 만들어 수정했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top