Надеюсь, я понял, что вы просили, но я бы сказал, что вы можете заставить T4 работать и в SL.T4 можно попросить сгенерировать то, что иногда называют шаблонами времени выполнения.Я определил свой шаблон (очень простой) и добавил его в свой проект Silverlight.
<#
for (var iter = 0; iter < 10; ++iter)
{
#>
This is just a test: #<#=iter#>
<#
}
#>
Обычно он генерирует такой вывод:
This is just a test: #0
This is just a test: #1
This is just a test: #2
This is just a test: #3
This is just a test: #4
This is just a test: #5
This is just a test: #6
This is just a test: #7
This is just a test: #8
This is just a test: #9
Но в этом случае мне нравитсягенерировать код, который генерирует этот вывод, т.е. шаблон времени выполнения.Для этого я переключаю пользовательский инструмент на: TextTemplatingFilePreprocessor
Теперь шаблон генерирует код, который генерирует этот вывод.Если не указывать hostspecific = true, вы не получите зависимости Visual Studio.Расширяя частичный класс переменными-членами и ссылаясь на них из файла шаблона, вы можете изменить поведение шаблона во время выполнения.
Проблема в Silverlight заключается в том, что в Silverlight отсутствуют классы: System.CodeDom.Compiler.CompilerErrorи System.CodeDom.Compiler.CompilerErrorCollection.
Я работал над этим, создавая собственные классы для этого (только для этой цели):
namespace System.CodeDom.Compiler
{
public class CompilerError
{
public string ErrorText;
public bool IsWarning;
}
public class CompilerErrorCollection : List<CompilerError>
{
}
}
Теперь мой шаблон компилируется, и я простонапример, из моего приложения Silverlight для вывода:
var runtimeTemplate = new MyRuntimeTemplate();
string output = runtimeTemplate.TransformText();