[C#] Il nome '__o' non esiste nel contesto corrente


Answers

Dopo aver letto i collegamenti forniti nei commenti sopra, risulta essere il modo in cui l'intellisense gestisce i blocchi.

Mikhail Arkhipov ha pubblicato una spiegazione e una soluzione alternativa nei forum ASP.NET :

Abbiamo finalmente ottenuto una replica affidabile e identificato il problema sottostante. Una semplice replica si presenta così:

<% if (true) { %>
    <%=1%>
<% } %>
<%=2%>

Per fornire intelligenza in blocchi <%= %> in fase di progettazione, ASP.NET genera l'assegnazione a una variabile __o temporanea e al linguaggio (VB o C #) quindi fornisce l'intellisense per la variabile. Questo viene fatto quando il compilatore di pagine vede il primo blocco <%= ... %> . Ma qui, il blocco è dentro il if , quindi dopo il if chiude, la variabile esce dall'ambito. Finiamo per generare qualcosa del genere:

if (true) { 
    object @__o;
    @__o = 1;
}
@__o = 2;

La soluzione alternativa consiste nell'aggiungere un'espressione fittizia nelle prime pagine della pagina. Ad esempio <%="" %> . Questo non renderà nulla, e farà in modo che __o sia dichiarato di primo livello nel metodo Render, prima di qualsiasi potenziale dichiarazione if (o altro ambito).

Notando sopra, la risposta di Failure in realtà non fa molto male, oltre a nascondere ogni errore intellisense, che sarebbe comunque noto al momento della compilazione.

Riferimento: http://youku.io/questions/324366/asp-net-mvc-error-name-o-is-not-declared https://msdn.microsoft.com/en-us/library/t8zbaa6f.aspx

Question

Ho appena installato Visual Studio 2015 e ho aperto il mio progetto asp .net su cui stavo lavorando. Ricevo molti errori (tutti esattamente uguali) come di seguito:

Errore CS0103 Il nome '__o' non esiste nel contesto corrente

Beh, in realtà non ho nessuna variabile chiamata __o e il codice funziona come un incantesimo (l'errore non è valido) ma ciò che mi dà fastidio è che non sono in grado di vedere quando il mio codice ha davvero un errore dato che va da qualche parte in questa lista e dovrei controllare l'intera lista.




Ciò che ha risolto questo problema dal suo punto di vista per me è stato aggiungere all'inizio un'espressione fittizia. Ad esempio <% = ""%>. Dai un'occhiata a questo link per ulteriori spiegazioni: inserisci la descrizione del link qui