2013-06-28 15 views
10

Ich habe eine Windows Store-Anwendung, die eine portable Klassenbibliothek mit einer T4-Vorlage verwendet. Wenn ich die Transformation laufe nicht mit dem folgenden Fehler:Der Typ 'System.Object' ist in einer Assembly definiert, auf die nicht verwiesen wird - Windows Store-Anwendung

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'. 

Ich versuchte Bezug auf die System.Runtime Bibliothek manuell hinzufügen, aber ich habe Meldung „Die Komponente bereits automatisch durch das Build-System referenziert“

Die gleiche Bibliothek funktioniert sowohl in einem Silverlight-Projekt als auch in einem Windows Phone-Projekt.

Hat jemand eine Idee, wo ist das Problem?

Ich bin neu in der Entwicklung von Windows Store-Anwendungen, es könnte also ein trivialer Fehler sein, aber ich kann keine Lösung finden.

+0

Leider kann ich Ihren Fehler nicht reproduzieren. Vielleicht könnten Sie zumindest den Header-Teil Ihrer T4-Vorlage teilen? Haben Sie versucht, einen Verweis auf die System.Runtime-Assembly in der Vorlage (über die Anweisung <# @ assembly #>) hinzuzufügen, da die von einer Vorlage verwendeten Referenzen unabhängig von den Referenzen sind, die von ihrem enthaltenden Projekt verwendet werden. – Nico

Antwort

4

Zusammenfassung:

genau dieses Problem zu lösen, fügen Sie einfach die folgenden an die Spitze der T4-Vorlage:

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

Lange Antwort:

T4-Vorlagen sind ein Kompilierzeitkonzept und laufen daher im Kontext & Framework des Build-Stack (B. .NET Framework 4.5), nicht im Kontext des Host-Projekts, daher wird das Ändern des Store-Projekts zum Hinzufügen der Referenz zu System.Runtime nicht hilfreich sein.

Stattdessen sollten Sie T4 über die Vorlage selbst über die Referenz informieren. Dies wird normalerweise automatisch für Tools gehandhabt, die MSBuild verwenden, jedoch ruft T4 die Compiler im Wesentlichen direkt auf und muss daher manuell über jede tragbare Referenzbaugruppe informiert werden.

Wenn Sie anfangen, echten Code in der portablen Bibliothek zu schreiben, werden Sie schnell feststellen, dass Sie viel mehr Referenzen hinzufügen müssen; im Grunde jede Assembly unter% PROGRAMFILES (x86)% \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facades. Wenn Sie dies in vielen Vorlagen tun, würde ich empfehlen, eine einzige include template zu erstellen, die eine Assemblierungsanweisung für jede Datei im obigen Ordner enthält.

1

In meinem Fall (Xamarin Studio) bestand die Lösung darin, einen sauberen Build zu erstellen.