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


1 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 ASP.NET realtà non fa molto male, oltre a nascondere ogni errore intellisense, che sarebbe comunque noto al momento della compilazione.

Riferimento: there 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




Related