2011-11-16 22 views
11

Ogni tanto quando costruisco una soluzione specifica, otterrò una quantità casuale di "Un'espressione è troppo lunga o complessa da compilare" nell'errore Elenco Tuttavia, l'unica voce a cui punta l'errore è il progetto specifico, non un file all'interno del progetto o una LOC specifica.Errore di compilazione: "Un'espressione troppo lunga o complessa da compilare"

Quando ci si imbatte in questo, I 'Clean' e quindi riavvio VS e questo sembra risolverlo. Qualche idea su cosa sta causando questo?

Questa particolare soluzione contiene 50 progetti.

+0

Sono disponibili componenti aggiuntivi/estensioni che potrebbero interferire con la compilazione? – drharris

+0

Attualmente sono installati, abilitati e aggiornati "Vai a definizione" e "Strumenti di produttività". –

+0

Non sopporto più di circa 6 progetti/soluzioni ... sento molti dolori per te. –

risposta

14

FYI, quell'errore è caratteristico del compilatore che sta esaurendo lo spazio di stack. In genere questo accade quando si getta un problema "profonda ricorsione" al compilatore, come dire,

int x = (1 + (1 + (1 + (1 + ......... + 1) + 1) + 1) + 1); 

dire, diverse migliaia di profondità. Gli analizzatori sintattici e semantici sono entrambi analizzatori ricorsivi-discendenti e quindi soggetti a esaurire lo spazio di stack in scenari estremi.

Non ho idea del perché spegnerlo e ricominciare lo farebbe comunque. È davvero strano

Se si ottiene una riproduzione solida, mi piacerebbe vederlo. O postalo qui, o inserisci un bug su Connect e daremo un'occhiata a questo. Senza una solida replica, è molto difficile dire cosa sta succedendo qui.

+0

Perché l'errore di overflow dello stack non può essere posizionato almeno nell'area giusta? (Sono sicuro che c'è una ragione perfetta per questo) – configurator

+0

@configurator: esattamente quale stack di chiamate si desidera utilizzare per chiamare la procedura di analisi degli errori? Abbiamo sempre incontrato questo problema tutto il tempo in cui stavo lavorando allo scripting; saremmo a corto di stack e chiamiamo il browser per dirgli di visualizzare l'errore "out of stack", che ovviamente sarebbe * esaurito di nuovo stack *. Windows non accetta i programmi con thread che esauriscono lo stack * due volte *, ti assicuro. Nel compilatore C# quando esauriamo lo stack, ci limitiamo al panico e ci spostiamo fino ad un gestore di primo livello; quando siamo srotolati, "dove eravamo" è perso. –

+0

@Eric Suppongo che sia sufficiente disporre di un oggetto con riferimento heaf per stack che trattiene il file corrente (e la linea, ma probabilmente un po 'troppo costoso) in fase di elaborazione e l'aggiornamento che durante l'esecuzione sarebbe sufficiente in modo che il messaggio di errore potesse essere un po' più specifico . Oppure stai ricorsivamente in più "oggetti" diversi che rappresentano file potenzialmente diversi mentre lo fai. – ShuggyCoUk

1

Se la pulizia e la ricostruzione funzionano, ovviamente non è un problema con il codice. Dovresti segnalarlo a Microsoft, sembra un bug VS.

0

Non l'ho mai visto in natura.

Tuttavia, da googling attorno ad esso può ben essere da un eccesso di riferimenti di montaggio, un particolare citazione:

If I reduce number of referenced assemblies to 5500 it is compiled and working

Ora, sicuramente, si sarebbe notato un elenco di dipendenze che di grandi dimensioni, si potrebbe verificare se si avere un numero eccessivo di assiemi a cui si fa riferimento?

+3

Come si può fare riferimento a 5mila assemblee? – svick

+0

Appena controllato; non sembra essere troppo grande. Quella persona si riferisce a 5500 assemblee individuali? O semplicemente sommando il numero di assiemi di riferimento in ogni progetto e contando i duplicati come System, System.XML etc? –

+0

Ho ricevuto questo errore, credo per lo stesso motivo e sto facendo riferimento solo a 63 assembly. –

2

Durante la creazione, è possibile visualizzare l'output di compilazione l'ultima cartella che controlla prima che abbia esito negativo. Ho rimosso i file in quella cartella e li ho richiamati uno alla volta. Finalmente trovato il problema. Non so esattamente cosa sia ma era una pagina .aspx con un sacco di HTML. Non è stato usato spesso così l'ho appena rimosso dal progetto e ora lo compila.

enter image description here

enter image description here

4

ho ottenuto questo errore in un progetto quando sono passato da Visual Studio 2012 a Visual Studio 2013. Comunità Nel mio caso si trattava di file gigante (25k linee, non scritto da me) con List<string[]> inizializzato dall'inizializzatore della raccolta.

Qualcosa di simile a questo:

public class Class 
{ 

    public List<string[]> BigList 
    { 
     get 
     { 
      return new List<string[]>() 
      { 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       . 
       . 
       . 
       . 
       . 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"} 
      } 
     } 
    } 
} 

ho cambiato in string[][] e il progetto è iniziato a compilare

public class Class 
{ 

    public string[][] BigList 
    { 
     get 
     { 
      return new string[][] 
      { 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       . 
       . 
       . 
       . 
       . 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"}, 
       new string[]{"foo","bar"} 
      } 
     } 
    } 
} 
+0

Grazie amico, mi hai salvato la vita. –

+0

Anche questo ha risolto il problema. Avevo una lista con oltre 40.000 parole al suo interno e ricevevo quell'errore e cambiandolo in una stringa [] risolto l'errore !!! – MattyMerrix

+0

linee da 67k, questo lo ha risolto. – odyth

0

ho ottenuto questo problema oggi. In qualche modo ho ottenuto una stringa molto lunga nel mio file index.cshtml.Quindi controlla le stringhe lunghe che possono causare questo problema.

0

ho ottenuto questo errore causa di file SVG molto grande. e dopo che Google e qualche esperimento personale ho trovato che la soluzione per grandi file in formato SVG è:

@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg"))) 

nel file di rasoio c'è un altro approccio con html parziale, ma, purtroppo, questo trucco non funziona con grandi file in formato SVG.

speranza questo aiuto ..

0

Ho avuto lo stesso problema in un computer a 64 bit (VS 2012).

Ho usato la risposta di @ MikeFlynn per individuare la cartella che ha causato l'errore.

Alla fine ho scoperto che avevo una pagina Help.aspx senza codice dietro - solo HTML ma aveva più le immagini delle icone incorporate come base di 64

<img src="data:image/png;base64 ... /> 

ho convertito in HTML statico e compilato.

P.S. Lo stesso progetto stava compilando O.K. in una macchina VS2012 a 32 bit. Entrambe le macchine eseguivano Windows 7.

Problemi correlati