Я использую класс Microsoft.VisualStudio.TextTemplating.Engine
из пакета SDK VS 2008 вместе с объектами из пространства имен Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates
для автоматизации процесса создания классов C # из шаблонов T4.
Вот мой код. Это взято прямо из примера на блоге Олега Сыча ...
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates;
using Microsoft.VisualStudio.TextTemplating;
namespace PropertyDirectivePot
{
class Program
{
static void Main(string[] args)
{
// Prepare template parameters
var arguments = new Dictionary<string, PropertyData>();
arguments.Add(“MyProperty”,
new PropertyData(Color.AntiqueWhite, typeof(Color)));
// Initialize GAX template host
string currentDirectory = Directory.GetCurrentDirectory();
TemplateHost host = new TemplateHost(currentDirectory, arguments);
host.TemplateFile = Path.Combine(currentDirectory, “PropertyTest.tt”);
// Transform template
string template = File.ReadAllText(host.TemplateFile);
ITextTemplatingEngine engine = new Engine();
string output = engine.ProcessTemplate(template, host);
// Save output
string outputFile = Path.ChangeExtension(host.TemplateFile, “.txt”);
File.WriteAllText(outputFile, output);
}
}
}
Проблема
Я получаю System.EntryPointNotFoundException
в тот момент, когда шаблон обрабатывается и файл выходного кода должен быть возвращен ...
string output = engine.ProcessTemplate(template, host);
Это исключение говорит о том, что у меня где-то не совпадает версия компонента, и поиск в Google обнаружил, что эта проблема возникла у других, но с гораздо более старыми версиями компонентов, которые я использую. Мои версии ...
Visual Studio SP1 9.0.30729.1
Microsoft.VisualStudio.TextTemplating 9.0.0.0
Microsoft.Practices.RecipeFramework.VisualStudio.Library 1.4.0.0
У меня установлены последние версии GAX, GAT и VS2008 SDK (все загружены и установлены сегодня).
Кто-нибудь имеет представление о том, что происходит, или как я мог бы продолжить расследование?
Я действительно хочу избежать необходимости использовать трассировщик для отслеживания стека вызовов, если это вообще возможно: (