Я использовал CodeDom для генерации кода.Это прекрасно работает, но я не нашел способа включить сгенерированные файлы исходного кода в проект.Я начал использовать T4 и T4Toolbox для генерации кода, поскольку он поддерживает интеграцию с файлами проекта.
Кто-нибудь знает, поддерживает ли CodeDom эту функцию?Я бы хотел еще раз взглянуть на CodeDom, если бы он поддерживал только эту функцию.
Вот пример того, как я делаю файл с исходным кодом с CodeDom:
protected void CreateSourceFile(CodeCompileUnit codeCompileUnit,
string fileName,
out string fileNameWithExtension)
{
fileNameWithExtension = string.Format("{0}.{1}",
fileName,
CodeProvider.FileExtension);
var indentedTextWriter =
new IndentedTextWriter(new StreamWriter(fileNameWithExtension,
false),
TabString);
CodeProvider.GenerateCodeFromCompileUnit(codeCompileUnit,
indentedTextWriter,
new CodeGeneratorOptions());
indentedTextWriter.Close();
}
Это работаетхорошо, но он просто выводит файл на жесткий диск где-то (возможно, в папку bin).
Вот второй пример кода, который я использую с T4, этот определяет вывод как часть проекта, шаблон которогопреобразовано в:
public class RDFSClassGenerator : Generator
{
private readonly string rootNamespace;
private readonly string ontologyLocation;
public RDFSClassGenerator(
string rootNamespace,
string ontologyLocation)
{
this.rootNamespace = rootNamespace;
this.ontologyLocation = ontologyLocation;
}
protected override void RunCore()
{
XElement ontology = XElement.Load(ontologyLocation);
var service = new RDFSGeneratorService(ontology);
foreach (MetaClass metaClass in service.MetaClasses)
{
var rdfsClassTemplate = new RDFSClassTemplate(rootNamespace, metaClass);
rdfsClassTemplate.Output.File = "Domain/" + metaClass.Name + ".cs";
rdfsClassTemplate.Render();
}
}
}
Таким образом, код T4 выведет файл в папку «Домен» моего проекта.Но программа CodeGen просто выводит файл на диск и не обновляет файл проекта.
Вот изображение: