2009-06-20 25 views
21

Sto lavorando a un progetto C++ che non intendo sviluppare o distribuire utilizzando librerie o strumenti .NET, il che significa che per me è logico crearlo utilizzando un Visual Applicazione Studio Win32 Console. Tuttavia, ho sentito che le capacità di debugging quando si utilizza un'applicazione CLR in Visual Studio sono molto più potenti. Così ho alcune domande:App Win32 Console vs CLR Console app

  1. E 'vero che avere un'applicazione CLR contro un'applicazione Win32 aggiunge funzionalità per il processo di sviluppo, anche se non si utilizzano le librerie .NET o altre risorse?

  2. In tal caso, sarei ancora in grado di sviluppare/compilare il progetto come un progetto CLR per trarne vantaggio anche se svilupperei un progetto C++ puro usando STL, ecc. E non sfruttando alcun Funzionalità .NET? Oppure un tale progetto richiederebbe differenze fondamentali che renderebbero non banale il ripristino, ovvero dovrei rimanere con un'app per console Win32?

risposta

25

inferiore linea di risposta, se non siete mai intenzione di utilizzare il CLR o qualsiasi oggetti .NET nella vostra applicazione, basta usare un normale libreria Win32 C++. Fare qualsiasi altra cosa ti causerà dolore lungo la strada.

Ora, per rispondere alla domanda originale sul debug, sì il debugging con CLR presenta alcuni vantaggi rispetto al debug di una normale app C++. A partire da Visual Studio 2005, sia C# che VB.Net hanno iniziato a concentrarsi sul rendere la visualizzazione delle variabili nella finestra locale/auto/orologio molto più preziosa. È stato fatto principalmente attraverso l'introduzione di attributi .Net come DebuggerDisplay, DebuggerTypeProxy e il framework visualizer.

Se non si utilizza alcun tipo .Net, non si otterrà nessuno di questi vantaggi.

Il valutatore di espressioni C++ non sfrutta nessuno di questi. Ha i propri metodi di personalizzazione del display di tipo. Ma non è così pieno di funzionalità (o potenzialmente pericoloso) come lo stile dell'attributo perché non consente l'esecuzione del codice nel processo di debug.

Questo non vuol dire debugging C++ fornisce un'esperienza negativa. È semplicemente diverso e ci sono display migliori per molti tipi di container STL.

Il debug di un'app CLR ha anche alcuni svantaggi. Ad esempio, il debug del codice ottimizzato è quasi impossibile a volte perché il JITer nasconderà variabili locali, parametri e spesso "questo". Anche il debug di un'app C++ costruita in modo simile può essere frustrante, ma puoi sempre afferrare i registri e in modo disonesto per vedere cosa sta succedendo. Fare la stessa cosa per un'app CLR è al massimo difficile.

+0

Mille grazie per la tua risposta dettagliata! Mi stavo chiedendo se potevi approfondire un po 'la tua prima affermazione e spiegare quali tipi di problemi tale impostazione potrebbe dover affrontare a lungo termine? Verrebbe per lo più dall'uso inavvertito di oggetti/caratteristiche .NET, facendoli compilare correttamente, e quindi dover cambiare queste parti del codice profondamente incorporate nell'applicazione in un secondo momento? – bsofman

+0

@bsofman, essenzialmente sì. Per poter sfruttare il CLR e implementare senza CLR, sono necessarie 2 configurazioni di build (una per ciascuna). Le differenze tra le lingue apparirebbero in errori di compilazione in una configurazione ma non nell'altra e finiranno per essere piuttosto fastidiose – JaredPar

2

Penso che la compilazione del codice C++ nativo in CLR apre un'intera scatola di worm. A meno che tu non abbia grandi investimenti sul codice C++ esistente e qualche necessità di eseguire il codice con i tipi gestiti, questo è qualcosa che vuoi evitare.

Ad esempio, C++/CLI è un modo per raggruppare il codice C++ nativo direttamente in un assembly CLR, ma C++/CLI aggiunge la sintassi non standard al linguaggio C++ e l'utilizzo di tipi C++ nativi combinati con tipi gestiti sembra molto problema delicato a dir poco.

Quindi, in conclusione, lo terrei solo come app nativa. Se hai qualche piano per portarlo su CLR e hai appena iniziato a lavorare su questo progetto, penserei seriamente di iniziare a scrivere in un linguaggio nativo CLR come C#.

+0

C++ CLI è spaventoso! – toto

1

Questa risposta copiato da qui - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console-application

Qual è la differenza tra il CLR un'applicazione console e l'applicazione console Win32? - Il primo utilizza Common Language Runtime (in altre parole, .NET framework); il secondo no.

e non riesco a utilizzare il sistema namespace sotto il modello di applicazione della console win32. - Lo spazio dei nomi di sistema è parte di .NET framework.

Cosa devo fare quando voglio utilizzare lo spazio dei nomi? - Dovresti scrivere un'applicazione .NET.

e Non ha suggerimenti di input come nel modello C#? - In effetti, non esiste IntelliSense per C++/CLI nelle versioni esistenti di Visual Studio. Se si desidera un'applicazione .NET, C# potrebbe essere una scelta migliore per la lingua.

Problemi correlati