Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

C# and Visual Studio

Îåêßíçóå áðü ôï ìÝëïò George Parissis. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 02-09-2015, 13:06. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-08-2015, 19:29 77194

    C# and Visual Studio

    Όχι δεν άλλαξα την αγαπημένη μου γλώσσα του Net. Απλά για τις ανάγκες αναβάθμισης ενός Web Service γραμμένο ήδη σε C# έπρεπε να ασχοληθώ.

    Χωρίς να θέλω να μπω σε μία συζήτηση αντιπαράθεσης μεταξύ VB/C# ήθελα να ρωτήσω μερικά πράγματα και αν είναι δυνατό να μου απαντηθούν για να δω αν υπάρχει κάποιο λάθος setting στο Visual Studio που έχω εγκατεστημένο.

    Όταν γράφω το όνομα μίας κλάσης όπου το namespace δεν έχει γίνει reference με using για να δουλέψει το Tip και να μου εισάγει αυτόματα το reference θα πρέπει το όνομα της κλάσης να είναι Case Sensitive. Κάτι που στην VB γίνεται με Case Insensitive.

    Όταν δηλώνω ένα property και ορίζω private μεταβλητή που είναι το storage της τιμής του property εμφανίζεται warning με αριθμό 0642 ότι δεν έχει δωθεί τιμή και ότι η τιμή θα είναι η default. Ορίζω αρχική τιμή αλλά το warning παραμένει. Θα πρέπει να κλείσω το VS και να το ανοίξω ξανά για να φύγει το warning. Κλείσιμο και άνοιγμα του αρχείου της κλάσης δεν αφαιρεί το warning.

    Όταν ξεκινάω να γράφω το όνομα μίας μεταβλητής, ρουτίνας, κλάσης το Intellisense βγαίνει κανονικά. Όταν όμως απομακρύνω τον κέρσορα από την γραμμή που έγραψα το όνομα και γυρίσω πίσω για να το αλλάξω π.χ έγραψα ένα γράμμα λάθος ή θέλω να αναφερθώ σε άλλη ρουτίνα το intellisense δεν εμφανίζεται πλέον. Θα πρέπει να σβύσω όλοι την γραμμή και να ξεκινήσω από την αρχή.

    Όλα αυτά όταν δουλεύω με VB projects στο ίδιο installation του VS παίζουν κανονικά.

    Μπορεί κάποιος να μου υποδείξει τι μπορώ να κάνω για να εξαλείψω αυτά τα μικρά και ενοχλητικά bugs;

    Ευχαριστώ. 

  •  31-08-2015, 10:57 77195 σε απάντηση της 77194

    Απ: C# and Visual Studio

    Καλημέρα 

     Έχω την εντύπωση ότι αυτό θα σε βοηθήσει:

     http://stackoverflow.com/questions/17703004/visual-studio-displaying-errors-even-if-projects-build-resharper  

     report back if it helped


    Manos
  •  31-08-2015, 11:15 77197 σε απάντηση της 77194

    Απ: C# and Visual Studio

    Ποιά έκδοση του Visual Studio έχεις και τί addin έχεις εγκαταστήσει? Τί είδους project έχεις δημιουργήσει? Δεν έχει τόσο σημασία η γλώσσα όσο η έκδοση του IDE και τυχόν productivity addins όπως ο ReSharper, productivity tools κλπ. Επίσης, τί εννοείς "δεν εμφανίζεται το intellisense"? Τί πατάς για να εμφανιστεί? Δοκίμασες κάποιο από τα keyboard shortcuts ή περιμένεις να εμφανιστεί κάτι (και τί?) στο hover? Σίγουρα δεν χρειάζεται να σβήσεις γραμμές για να δουλέψει το intellisense αλλιώς θα είχε γίνει επανάσταση.

    Με δεδομένο μάλιστα ότι το intellisense και τα refactorings της VB.NET είναι πάντα λιγότερα απ΄ότι της C#, υποψιάζομαι ότι έχεις εγκαταστήσει κάποιο addin για VB.NET το οποίο φυσικά δεν δουλεύει για C#. Ακόμα και αν έχεις βάλει κάποιο addin που υποστηρίζει και τις δύο γλώσσες όπως πχ. κάποιο από τα πιο πρόσφατα ReSharper, μπορεί το addin να συμπεριφέρεται περίεργα λόγω bug (και το ReSharper έχει κάμποσα). Σε αυτή την περίπτωση το καθάρισμα των temp folders/cache του addin θα διορθώσει το πρόβλημα


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  31-08-2015, 20:33 77198 σε απάντηση της 77197

    Απ: C# and Visual Studio

    Δεν χρησιμοποιώ κανένα productivity tool. Είναι καθαρή εγκατάσταση VS 2015 χωρίς ReSharper.

    Αλλά ας τα πάρουμε από την αρχή ένα ένα.

    Γράφω το παρακάτω: 

    public class MyBaseModel : inotifypropertychanged { }

    Παίρνω ένα ωραίο μήνυμα λάθους ότι δεν μπορεί να το βρει. Μου λείπουν κάποια references ή namespace; Με ρωτάει. Ναι φυσικά μου λείπει, έχει δίκιο. Επιλέγω μία από τις επιλογές που μου εμφανίζει και μου αναφέρει επιλογές που αφορούν που να δημιουργήσει μία κλάση με το όνομα inotifypropertchanged. Εδώ νομίζω θα έπρεπε να βγάζει να κάνω using System.ComponentModel σαν μία από αυτές. Θα πρέπει να γράψω σωστά το INotifyPropertyChanged με κεφαλαία για να το δει. Αυτό το αντιμετωπίζεται και εσείς;

    Γράφω σωστά το INotifyPropertyChanged και κάνω using system.ComponentModel. Τώρα φυσικά και πολύ σωστά μου λέει να κάνω implement το interface. Αλλά τελικά αντί το INotifyPropertyChanged θέλω να χρησιμοποιήσω το INotifyDataErrorInfo που είναι στο ίδιο namespace. Πάω λοιπόν και αρχίζω από το τέλος να σβύσω το INotifyPropertyChanged χαρακτήρα χαρακτήρα για να μου βγάλει το intellisense με το INotifyDataErrorInfo. Δεν το βγάζει. Θα πρέπει να σβύσω όλοι την λέξη INotifyPropertyChanged μέχρι και την άνω κάτω τελεία (:), να αρχίσω να γράφω ξανά και να μου βγάλει intellisense με τις διαθέσιμες κλάσης και interfaces. 

    Από την μεριά σας δηλαδή δεν υπάρχει τέτοιο θέμα; Και σε ένα άλλο μηχάνημα που το δοκίμασα εδώ στην δουλειά το ίδιο έγινε.

  •  01-09-2015, 16:20 77199 σε απάντηση της 77198

    Απ: C# and Visual Studio

    Καταρχήν, το πρώτο δεν είναι θέμα ούτε περίεργο - η C# *είναι* case-sensitive και το inotifypropertychanged δεν έχει καμμία σχέση με το INotifyPropertyChanged. Για την ακρίβεια, και το ίδιο το .NET θεωρεί διαφορετικά τα δύο σύμβολα. Είναι ιδιαιτερότητα της VB ότι είναι case-insensitive και o compiler της ψάχνει τα διαθέσιμα σύμβολα αγνοώντας το case. Αν έβρισκε δύο σύμβολα που διαφέρουν μόνο στο casing θα σου γκρίνιαζε, παρότι το .NET το ίδιο δεν έχει πρόβλημα. Αν πχ. είχες μία κλάση με δύο public members που διαφέρουν μόνο στο case, θα είχες θέμα.

    Σε αυτή την περίπτωση το "σκέτο" intellisense απλά θεωρεί ότι λείπει η κλάση και πρέπει να φτιαχτεί. Άλλα εργαλεία, ή Roslyn analyzers ψάχνουν να δουν μήπως και υπάρχουν άλλα σύμβολα με παρόμοιο όνομα και σου προτείνουν να προσθέσουν το κατάλληλο library και namespace.

    Όσο για τη δεύτερη περίπτωση, θα πρέπει να εξηγήσεις τί έκανες, καθώς πατώντας Ctrl+Space το code completion *εμφανίζει* τα σύμβολα που ξεκινούν με το τρέχον identifier. Αν δηλαδή σβήσω το Changed και πατήσω Ctrl+Space, θα μου προτείνει το INotifyPropertyChanged και το INotifyPropertyChanging. Αν σβήσω μέχρι και το Property, θα μου εμφανίσει και το INotifyDataErrorInfo

     

     

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  01-09-2015, 23:09 77203 σε απάντηση της 77199

    Απ: C# and Visual Studio

    Για την πρώτη περίπτωση θα διαφωνήσω μαζί σου Παναγιώτη. Θα έπρεπε να βγάζει σαν επιλογή το namespace. Και ας τα θεωρεί διαφορετικά σαν strings. Η αντιπαράθεσή μου δεν είναι αν αυτή, αλλά το πως χτίστηκε το intellisense επάνω σε αυτό. Ακόμα και στην περίπτωση όπου υπήρχε άλλο interface που να γραφόταν με τα ίδια γράμματα αλλά με διαφορετικά cap θα έπρεπε να βγάζει στις επιλογές Using System.ComponentModel.INotifyPropertyChanged & System.ComponentModel.inotifypropertychanged & Create a class intotifypropertychanged... Και καλά να έχω να κάνω με κλάσης και Interfaces του .Net. Αν έχω να κάνω με third party libraries; Που να ξέρω εγώ με τι capitalization το έχει γράψει ο κάθε ένας; Θα πρέπει να με υποχρεώσει να κοιτάξω το SDK του ή κάποιο άλλο έγγραφο. To τονίζω, δεν έχω πρόβλημα που τα θεωρεί διαφορετικά string, πρόβλημα έχω με το intellisense και με τις επιλογές που δίνει.

    Στην τελική άνθρωποι ήμαστε γράφουμε κάτι και εμείς, λανθασμένα θεωρούμε ότι το inotifypropertychanged είναι το ίδιο με το INotifyPropertyChanged. Για αυτό υπάρχουν αυτά τα βοηθήματα εκεί για να μας βοηθούν ακόμα και όταν γράφουμε κάτι λάθος.

    Όσο για το δεύτερο σωστά το αναφέρεις. Πρέπει να γράψω Ctrl+Space, έχεις δίκιο το βλέπω. Αλλά και πάλι στα πλαίσια του να φτιάξω ένα εργαλείο που λέγεται intellisense που σκοπό έχει να βοηθάει τον χρήστη θα περίμενα να βγαίνει από μόνο του μόλις αρχίσω να σβήνω χαρακτήρες. Δηλαδή δεν νομίζω να είχε κανένας προγραμματιστής πρόβλημα μόλις αρχίσω να σβήνω ένα χαρακτήρα από το όνομα μία κλάσης να μου έβγαζε αμέσως το intellisense.

    Πάντως σε ευχαριστώ για τις απαντήσεις σου.  

     

  •  02-09-2015, 11:03 77204 σε απάντηση της 77203

    Απ: C# and Visual Studio

    Ασχετο, το F12 (Go to definition) δεν δουλευει στο vs2015;
  •  02-09-2015, 13:06 77205 σε απάντηση της 77204

    Απ: C# and Visual Studio

    Δουλεύει, αλλά πάλι διάφορα addins μπορεί να προκαλούν μπελάδες. Αν για παράδειγμα ένα addin βάζει το δικό του Goto Reference στο F12 αλλά δεν το επαναφέρει κατά την απενεργοποίηση ή αφαίρεση, το F12 μπορεί να σταματήσει να δουλεύει. Είχα πρόσφατα τέτοιους μπελάδες με το F12 *και* το F10. Τελικά το ένα λύθηκε με Keyboard reset, το άλλο απεγκατθιστώντας το ενοχλητικό addin - και δεν θυμάμαι ποιό ήταν!
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems