Я использую CodeDom для создания кода. Он отлично работает, но я не нашел способ включить сгенерированные файлы исходного кода в проект. Я начал использовать T4 и T4Toolbox для генерации кода, потому что он поддерживает интеграцию с файлами проекта.Может ли CodeDom добавлять файлы исходного кода в проект?
Кто-нибудь знает, поддерживает ли 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();
}
Это прекрасно работает, но он просто выводит файл на жесткий диск где-то (вероятно, бен папку).
Вот второй пример некоторого кода я использую с 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 просто выводит файл на диск и не обновляет файл проекта.
Вот визуальный:
Хммм, Не уверен, что вы делаете. Вы смешиваете CodeDom с t4? Я использую T4 для добавления файлов в решение, создав конкретный хост шаблона, а затем с помощью EnvDTE добавьте файл в решение. Может быть, вам нужно уточнить, что вы делаете? – Will
@ Я только что добавил несколько примеров из разных способов использования CodeDom и T4.Похоже, мне, возможно, придется заглянуть в EnvDTE? –