2013-06-28 10 views
10

Ho un'applicazione Windows Store che utilizza una libreria di classi portatile con un modello T4. Quando eseguo la trasformazione non riesce con il seguente errore:Il tipo 'System.Object' è definito in un assembly a cui non viene fatto riferimento - Applicazione Windows Store

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

Ho provato ad aggiungere riferimento alla libreria System.Runtime manualmente, ma ho ottenuto il messaggio "Il componente è già referenziato automaticamente dal sistema di compilazione"

La stessa libreria funziona in un progetto Silverlight e in un progetto Windows Phone.

Qualcuno ha un'idea di dove si trova il problema?

Sono nuovo nello sviluppo di applicazioni Windows Store, quindi potrebbe essere un errore banale, ma non riesco a trovare alcuna soluzione.

+0

Purtroppo non riesco a riprodurre il tuo errore. Forse potresti condividere almeno la parte di intestazione del tuo modello T4? Avete provato ad aggiungere un riferimento all'assembly System.Runtime all'interno del modello (tramite la direttiva <# @ assembly #>), poiché i riferimenti utilizzati da un modello sono indipendenti dai riferimenti utilizzati dal relativo progetto contenitore. – Nico

risposta

4

Sommario:

Per risolvere questo problema esatto, è sufficiente aggiungere il seguente alla parte superiore del modello T4:

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

risposta lunga:

modelli T4 sono un concetto in fase di compilazione, e quindi viene eseguito nel contesto dello stack di build & cioè .NET Framework 4.5), non nel contesto del progetto host, quindi la modifica del progetto Store per aggiungere il riferimento a System.Runtime non è di aiuto.

Invece, ciò che dovresti fare è comunicare a T4 il riferimento tramite il modello stesso. Questo è normalmente gestito automaticamente per gli strumenti che usano MSBuild, tuttavia, T4 chiama in pratica i compilatori direttamente e quindi deve essere detto manualmente su ogni assembly di riferimento portatile.

Quando inizi a scrivere codice reale nella libreria portatile, troverai rapidamente che è necessario aggiungere molti più riferimenti; in pratica, ogni assembly sotto% PROGRAMFILES (x86)% \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facades. Se lo fai in molti modelli, ti consiglio di creare un singolo include template che contenga una direttiva assembly per ogni file nella cartella sopra.

1

Nel mio caso (Xamarin Studio), la soluzione era di eseguire una compilazione pulita.

Problemi correlati