Я хочу поделиться своим кодом библиотеки классов между .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" #>