2011-10-14 6 views
5

Sto compilando dinamicamente il codice, utilizzando CompileAssemblyFromSource con più origini..NET CompileAssemblyFromSource: determina quale origine non è riuscita?

In caso di errore di compilazione, è possibile recuperare il numero di riga ecc. Dalla raccolta Errors.

Tuttavia il numero di riga è il numero di linea all'interno di tutte le fonti. Quello di cui ho bisogno è quale fonte e il numero di linea all'interno della fonte fallita (tra le fonti aggiunte).

È possibile senza eseguire calcoli acrobatici?

+3

Vorrei prendere in considerazione l'uso di 'CompileAssemblyFromFile' invece (almeno come opzione di debug o verbose) questo ti dà la possibilità di guardare le fonti dopo il fatto e vedere cosa stava succedendo. Se usi file temporanei puoi sempre ripulire dopo ... –

+1

@Paul Questa dovrebbe essere una risposta! –

+0

@Paul: scrivere su un file temporaneo che non posso usare, ho paura. Nella mia soluzione (che ha il problema specifico), le fonti sono raccolte da molte fonti individuali (anche da parte dell'utente finale) e ho bisogno solo di vedere la vera fonte che ha il problema. –

risposta

0

Lo faccio in una delle mie app, e se c'è un errore, scrivo la fonte che è stata compilata - la fonte che ha generato l'errore del compilatore - insieme a tutti i messaggi di errore generati durante la compilazione. Inserisco questi messaggi di errore nei commenti e li aggiungo alla fine del file sorgente. Il file sorgente viene scritto con File.WriteAllText() se ricordo correttamente, in un file nella directory temporanea dell'utente, e quindi lancio un'eccezione con il percorso per quel modulo sorgente. Tutto ciò accade solo se c'è un errore di compilazione. Se non ci sono errori, allora non scrivo la fonte in questo modo.

C'è davvero solo un modulo nel mio caso perché concatenare tutta la fonte in un singolo modulo. Non c'è confusione su cosa significa "linea 143" in questa situazione.

Problemi correlati