2010-10-14 17 views
5

Ho appena incontrato un problema piuttosto strano con VS2010 e Script #, che la maggior parte delle volte sono in grado di ricreare.Script # e problemi del compilatore

Nel mio semplice scenario ho 2 progetti nella mia soluzione; un'applicazione Web standard MVC2 Asp.Net e una libreria di classi jQuery di script n. Ho creato una classe statica (attribuita con [Importato]) con un metodo statico su di esso, con l'intenzione di mappare questa classe in codice a una libreria Javascript esterna, come descritto nella documentazione.

Tuttavia, sembra che ogni volta che decoro tale classe con [IgnoreNamespace] per raggiungere questo obiettivo, il progetto interrompe correttamente la compilazione ma non mi dà alcun feedback sul motivo per cui non funziona (nessun errore nella finestra di errore, per esempio). Non è facile sbarazzarsi di entrambi, poiché Visual Studio sembra entrare in uno stato permanente di fallimento non di costruzione; rimuovere le classi e i file di progetto non lo risolve, né riavviare lo studio visivo. L'unico modo per convincere VS a costruire il progetto con successo è eliminare completamente il progetto, crearne uno nuovo, quindi aggiungere nuovamente i file, il che è a dir poco fastidioso.

Con un'impostazione di uscita accumulo verbose, ottengo il seguente:

Target "AfterCompile" nel file "C: \ Program Files (x86) \ ScriptSharp \ v1.0 \ ScriptSharp.targets" dal progetto "e : \ project \ \ ScriptSharpDemo \ Scripts locali \ Scripts.csproj"(target "Compila" dipende da questo): Task "ScriptCompilerTask" Fatto esecuzione compito "ScriptCompilerTask" - FALLITO. Fine edificio target "AfterCompile" nel progetto "Scripts.csproj" - FAILED.

.. che non mi dice tutto.

Ci sono stati un paio di volte in cui sono riuscito a creare questo tipo di classe e poi costruire con successo, ma soprattutto mi possibile riprodurre il problema abbastanza affidabile.

A questo punto io sono incline a pensare che il bug si trova con Script #, ma vorrei solo avere che ha confermato, e di trovare un possibile lavoro intorno se ce n'è uno.

+0

Dovresti ridurre la classe che stai cercando di importare e postarla qui. –

+0

Inoltre, stai usando l'ultima versione del compilatore? Prova 0.6.1.0 se non l'hai già fatto. –

+1

Grazie per la risposta. Mi sono reso conto che questo problema si verifica solo se si seleziona l'elemento "Aggiungi classe .." quando si tenta di inserire una nuova classe nel progetto Script #, anziché scegliere "Aggiungi elemento ..", quindi scegliere una classe Script # da li. Non appena aggiungi una classe usando il primo metodo, rende il progetto inutilizzabile. E ha senso; Ovviamente devo aggiungere un oggetto al progetto usando il metodo corretto. Anche se il file risultante sembra esattamente lo stesso, S # ovviamente conosce la differenza e non gli piace. Sfortunatamente è un errore facile da fare quando sei nella zona :( –

risposta

5

Nel caso qualcuno abbia un problema simile, ho trovato la causa del problema.

Quando si aggiunge una classe utilizzando questo metodo, o la copia di un file da un altro progetto per l'utilizzo all'interno di script #, questo provoca un riferimento a System.dll da aggiungere al progetto. Questo (comprensibilmente) causa la chiusura del progetto senza errori.

Sarebbe bello avere un avvertimento su questo o per Script # per rilevare in qualche modo quando si verifica questa situazione e/o creare un nuovo modello per quando uso 'Aggiungi classe' o importare un file, ma è solo un problema di convenienza e almeno ora posso indurre senza problemi a compilare il mio progetto semplicemente rimuovendo questo riferimento.

+0

Dovresti segnare come risposta –

1

Quando si cerca di fare di nuovo il mio progetto di costruzione, mi sono imbattuto nel seguente, possibili soluzioni:

  • la "casa \ HomePage.cs" e "Shared \ Utility.cs" non deve essere cancellato e rimangono dove Wre inizialmente creati
  • la "casa \ HomePage.cs" e "Shared \ Utility.cs" deve essere l'ultimo voci della "* csproj" -file. Dopo di essi, nessun tag "Compile" deve seguire
  • Chiamate problematiche a "Script.Letterale" potrebbe causare silenziosa fallisce - soprattutto fare attenzione quando si hanno parametri (come Script.Literal("{0}.doFoo()", variable))
  • Lo stesso sembra essere vero per 'String.Format' quando i parametri di formato non sono validi
  • namespace e le cartelle sembrano causare molti problemi, mettere tutte le classi nello stesso spazio dei nomi e tutte le classi nella stessa cartella potrebbe aiutare
0

Ho provato tutti i suggerimenti che sono stati forniti qui, ma ho continuato a vedere il problema. Alla fine, ho determinato che la causa nel mio la situazione era che avevo aggiunto un attributo [IntrinsicProperty] a una delle mie proprietà. Rimuovendolo risolto il problema. Non chiedermi perché questo stava causando un problema, ma pensavo Condividerei questa soluzione nel caso in cui altri vi si imbattessero.