2

Я хочу запустить утилиту t4 TextTransForm.exe на моем сервере сборки в командной строке. Я знаю, что объект DTE и т. Д. Недоступны в командной строке. Но выполнение простого преобразования на шаблоне, который ожидает параметр, также предполагает, что директива параметра не работает в командной строке.Возможны ли параметры передачи текста T4 в командной строке?

C: \ Util> "C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ TextTemplating \ 12.0 \ TextTransform.exe" test.tt -a !! MyParameter тест ошибки: Ошибки были генерируется при инициализации объекта преобразования. Преобразование не будет выполнено. Исключено следующее исключение: System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. на Microsoft.VisualStudio.TextTemplating9edb37733d3e4e5f96a377656fe05b5c.GeneratedTextTransformation.Initialize() на CallSite.Target (Закрытие, CallSite, объект) на System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid1 [T0] (CallSite сайта, Т0) arg0 на Microsoft.VisualStudio. TextTemplating.TransformationRunner.PerformTransformation()

Это мой шаблон test.tt:

<#@ template language="C#" hostspecific="true" #> 
<#@ parameter name="MyParameter" type="System.String" #> 
Parameter in expression block: <#= MyParameter #> 
Parameter in statement block: <# Write(MyParameter); #> 

Глядя на дискуссии, как Get argument value from TextTransform.exe into the template дал мне отпечаток ion он также будет работать в командной строке без установки определенного хоста или Visual Studio.

Так что я делаю что-то не так, или это просто не работает в командной строке?

+0

Согласно документации на https://msdn.microsoft.com/en-us/library/bb126245.aspx вы создали шаблон правильно. –

ответ

1

Директива параметра - это строка, которая вызвала ошибку. Просто удалите его, и вы можете прочитать значение параметра с помощью: this.Host.ResolveParameterValue ("", "", "MyParameter");

Так рабочий .tt выглядел следующим образом: ответ

<#@ template language="C#" hostspecific="true" #> 
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> 


Parameter value is 
<# 
var MyParameter= this.Host.ResolveParameterValue("","","MyParameter"); 
Console.WriteLine("MyParameter is: " + MyParameter); 
#> 
+0

Визуальный хост Studio недоступен при преобразовании командной строки –

0

hkstr является почти правильно, но "Host.ResolveParameterValue()" вызов не выполняется, когда используется в Visual Studio. Ответ заключается в завершении вызова в try ... catch или для проверки DTE. В моем случае ООД имел информацию, которую я хотел:

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ assembly name="EnvDTE" #> 
<#@ import namespace="EnvDTE" #> 
<# 
string activeConfiguration = null;   

// The IServiceProvider is available in VS but isn't available on the command line. 
IServiceProvider serviceProvider = Host as IServiceProvider; 
if (serviceProvider != null) 
{ 
    DTE dte = (DTE)serviceProvider.GetService(typeof(DTE)); 
    activeConfiguration = dte.Solution.SolutionBuild.ActiveConfiguration.Name; 
} 
else 
{ 
    activeConfiguration = this.Host.ResolveParameterValue("", "", "ActiveConfiguration"); 
} 
Console.WriteLine("ActiveConfiguration is: " + activeConfiguration); 
#>