Тип "System.Object" определен в сборке, на которую не ссылаются: приложение для хранилища Windows

У меня есть приложение для Windows Store, которое использует переносимую библиотеку классов с шаблоном T4. Когда я запускаю преобразование, он терпит неудачу со следующей ошибкой:

Compiling transformation: The type 'System.Object' is defined in an assembly 
that is not referenced. You must add a reference to assembly 'System.Runtime,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Я попытался добавить ссылку на библиотеку System.Runtime вручную, но получил сообщение "Компонент уже автоматически ссылается на систему сборки"

Эта же библиотека работает в проекте Silverlight, а также в проекте Windows Phone.

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

Я новичок в разработке приложений Windows Store, поэтому это может быть какая-то простая ошибка, но я не могу найти какое-либо решение.

Ответ 1

Резюме:

Чтобы решить эту проблему, просто добавьте следующее в начало шаблона T4:

<#@ assembly name="System.Runtime" #>

Длинный ответ:

Шаблоны T4 представляют собой концепцию времени компиляции и, следовательно, работают в контексте и структуре стека сборки (например,.NET Framework 4.5), а не в контексте проекта-хозяина, поэтому изменение проекта Store для добавления ссылки к System.Runtime не поможет.

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

Когда вы начнете писать реальный код в переносной библиотеке, вы быстро обнаружите, что вам нужно добавить гораздо больше ссылок; в основном, каждая сборка в разделе% PROGRAMFILES (x86)%\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\Facades. Если вы сделаете это во множестве шаблонов, я бы рекомендовал создать один include template, содержащий директиву сборки для каждого файла в указанной выше папке.

Ответ 2

В моем случае (Xamarin Studio) решение должно было выполнить чистую сборку.