Совместное использование шаблона T4 между Silverlight и .NET - PullRequest
1 голос
/ 11 января 2010

Я хочу поделиться своим кодом библиотеки классов между .NET 3.5 и Silverlight 3.

Поскольку я в основном занимаюсь разработкой для .NET, я хочу автоматически сгенерировать файл (ы) проекта Silverlight из соответствующего файла (файлов) проекта .NET.

Таким образом, у меня есть файл T4, который жалуется в Silverlight со следующим сообщением об ошибке:

Ошибка 1 Преобразование компиляции: имя типа или имя пространства имен 'CompilerError' не существует в пространстве имен 'System.CodeDom.Compiler' (вам не хватает ссылки на сборку?)

Ошибка 2 Преобразование компиляции: тип 'System.CodeDom.Compiler.CompilerErrorCollection' определен в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку 'Система, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089'.

Ошибка 3 Преобразование компиляции: «System.CodeDom.Compiler.CompilerErrorCollection» не содержит определения для «Add», и нет метода расширения «Add», принимающего первый аргумент типа «System.CodeDom.Compiler.CompilerErrorCollection». найдено (вам не хватает директивы using или ссылки на сборку?)

Мой акцент показывает, что мне не хватает ссылки на System.dll.

Если я добавлю следующую строку:

<#@ assembly name="System" #>

Тогда проект .NET жалуется:

Ошибка 1 Преобразование компиляции: сборка с той же идентификацией «Система, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089» уже импортирована. Попробуйте удалить одну из повторяющихся ссылок.

Похоже, мне просто нужно изменить код, который создает проект Silverlight, чтобы он только добавил сгенерированный файл .cs и оставил файл .tt вне.

Или я могу что-то сделать, чтобы оба компилятора были довольны?

Это начало моего .TT файла:

<#@ template language="C#v3.5" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System" #>
<#@ output extension=".Designer.cs" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>

1 Ответ

2 голосов
/ 12 января 2010

Если вам нужно убедиться, что ваш T4 работает из проекта Silverlight, вы можете легко сделать это, добавив следующую строку, чтобы попросить хост T4 загрузить правильный System.dll

<#@ assembly name="C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" #>

Смотрите этот подробный пост здесь

http://msmvps.com/blogs/theproblemsolver/archive/2009/03/24/getting-t4-templates-to-work-with-silverlight.aspx

Надеюсь, это поможет

...