2010-09-01 4 views
12

C#, VS2010, applicazione WinForm:VS 2010 - Errore durante l'apertura di controllo utente/form con Designer

A volte io ho il problema che ricevo un messaggio di errore quando si apre alcuni dei miei controlli/forme. Tutto il codice viene compilato e l'applicazione viene eseguita correttamente. Aprire il controllo nel designer mi dà:

Il caricatore di progettazione non ha fornito un componente radice ma non ha indicato il perché.

Dalla mia esperienza posso dire, di solito è qualcosa nel mio codice che non viene inizializzato correttamente, ad es. non viene impostata una proprietà che è in qualche modo disponibile in fase di esecuzione, ma non quando viene aperta con il progettista. L'unico problema è che la causa principale è difficile da trovare.

D: C'è la possibilità di utilizzare in qualche modo il debugger quando il designer apre il mio componente in Visual Studio 2010? Ciò aiuterebbe molto e il problema da affrontare è molto probabilmente una questione di minuti.

Nota: Giusto per chiarire, so come usare il debugger ;-), non ho idea di come potrei dire al progettista di VS2010 di aprire il mio controllo in modalità Debug.

A partire dal 2 settembre 2010 ha aggiunto:

Grazie per il vostro aiuto. Fondamentalmente è l'articolo della MSDN Library che descrive come farlo.

  • sono riuscito a configurarlo ed eseguire la seconda istanza (non c'era molto da capire come farlo).
  • Fallisce solo nel mio caso, perché la seconda istanza VS2010 (debugging Design Time) non riesce a trovare i simboli per il mio controllo personalizzato. Ho aggiunto i simboli manualmente sotto Debugging/symbols. No risultato, ancora "punto di interruzione non sarà colpito a causa di simboli mancanti"

BTW, utilizzando questo approccio è utile per escludere alcune cose dal simbolo caricamento (tramite finestra di moduli), perché questo sarà una cassaforte Un sacco di tempo.

Ora, se devo capire come ottenere i simboli risolti e quindi posso affrontare la questione .....

+0

Il debug del tempo di progettazione con la seconda istanza di VS2010 funziona, ho ancora un problema con i simboli per le mie DLL. Ho postato questo qui (http://stackoverflow.com/questions/3687840/vs2010-loading-symbols-to-debug-at-design-time-breakpoint-will-not-be-hit) e pubblicheremo la soluzione anche qui una volta lo so. –

risposta

13

La stragrande maggioranza dei problemi di progettazione con i controlli personalizzati è causata dal codice nei gestori di eventi o dalle sovrascritture dei metodi nel controllo in esecuzione in fase di progettazione e dall'ora di esecuzione. Ciò è normalmente auspicabile, si ottiene un riscontro istantaneo quando si modifica una proprietà nella finestra Proprietà, ad esempio.

Ma non desiderabile quando il codice dipende da qualcosa che è disponibile in fase di esecuzione ma non in fase di progettazione. Come una connessione dbase o un file che è memorizzato nella cartella build. Questo può generare eccezioni e Visual Studio non è molto robusto contro la gestione delle eccezioni in fase di progettazione. Nel peggiore dei casi, è possibile bloccare VS sul desktop senza alcuna diagnostica. Ma tutto è possibile.

Rivedere il codice nel tuo controllo e fare in modo che i bit di codice che dovrebbe solo corsa in fase di esecuzione sono avvolti in questo modo:

casi disk
if (!DesignMode) { 
    // etc.. 
} 

possono essere diagnosticati con le punte di debug in questo MSDN Library article .

+0

Grazie per il feedback Hans. Per prima cosa devo trovare la causa principale prima di poter sfruttare la condizione "DesignMode". Tuttavia, l'articolo di MSDN descrive come eseguirlo, è necessario solo capire il problema del simbolo (come descritto nella pubblicazione originale) –

+0

Vorrei * sicuramente * farlo al contrario. –

+0

Risolve la maggior parte dei casi, alcuni rimangono. –

12

di eseguire il debug di controllo in modalità progettazione, avete bisogno di due istanze di Visual Studio. Nel primo caso, apri il progetto che contiene questo codice sorgente di controllo. In Project Properties, Debugger, imposta la riga di comando che chiama un'altra istanza di Visual Studio (msdev? Non so esattamente per VS2010 - prendi dal collegamento), quindi esegui il comando "Avvia debug". Inizia un'altra istanza di Visual Studio. In questo caso, aprire il progetto client che utilizza il controllo sul modulo.

+0

Grazie Alex, questo è l'approccio giusto. L'articolo di MSDN alla risposta di Hans descrive esattamente come farlo. Ma anche la tua risposta è corretta. Nota: la mia reputazione qui non è ancora abbastanza alta per votare la tua risposta. –