Как я могу получить экземпляр VisualStudioWorkspace
для текущего сеанса из T4-шаблона? Я хочу, чтобы это могло анализировать исходные файлы в текущем решении (т. Е. Решение, в котором находится файл .tt).Как я могу использовать roslyn из шаблона t4 для синтаксического анализа текущего решения?
Из пакета VS я могу использовать GetService(SComponentModel)
и получить экземпляр рабочего пространства, но это, кажется, генерировать ошибку в T4-файл при помощи следующего кода:
IServiceProvider serviceProvider = (IServiceProvider)this.Host;
var comp = serviceProvider.GetService(typeof(SComponentModel)) as IComponentModel;
Обнаружена ошибка является: System.Runtime.Serialization.SerializationException: Type 'Microsoft.VisualStudio.ComponentModelHost.ComponentModel' in Assembly 'Microsoft.VisualStudio.ComponentModelHost.Implementation, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.
IIRC, T4 не работает в процессе VS; это может быть невозможно. – SLaks
Хм .. это звучит раздражающе, и немного странно. В конце концов вы можете получить доступ к FileCodeModel из DTE в T4-шаблоне, и я думал, что это было реализовано в дополнение к Roslyn в эти дни? – DeCaf
Либо я ошибаюсь, либо это работает только через кросс-процесс COM-сортировки. – SLaks