Am încărcat și convertit o mică soluție Windows Forms. Acum icoana de pe desktop e albastră-plumburie și nu portocalie-verzulie ca mai ieri.
Totul a mers excelent, nu am fost felicitat nici măcar cu un singur warning!
Aveam de adăugat vreo 3 noi mici funcționalități așa că am început lucrul. Chiar merge fluent treaba (deși soluția e mică dar diferențele față de v2008 în fluiditatea a lucrului sînt foarte clare). Am vrut să văd cum merg diverse componente așa că am deschis o fereastră, am dat niște clickuri inofensive pe controale, am deschis ferestre de cod, sus-jos-stînga-dreapta, am fost mulțumit.
Am terminat treaba propusă și am testat noutățile. Totul mergea strună, mă simțeam în sfîrșit bine în IDE-ul de .NET. Dacă insistă băieții în direcția asta cu fluidizarea și accelerarea lucrului și dacă mai fac un upgrade la hardware, cred că în versiunea 2013, lucrul în VS.NET va fi o experiență asemănătoare cu un joc bun pe Playstation 3.
A sosit momentul să trimit rezultatul la destinatar. Am compilat și am căutat link spre versiunea 4 de Framework. Am găsit, am încercat un download dar lucrurile erau cam moarte (oare foarte mulți se înghesuie pe el ?). Am cugetat 5 secunde și am zis că e mai bine să nu complic lucrurile și să revin cu ținta pe 3.5. Am schimbat-o la loc, am compilat, totul se înlănțuia perfect.
Destinatarul lipsea momentan așa că am dat să mă mai joc puțin prin aplicație. După cîteva clickuri semialeatoare am vrut să deschid o nouă fereastră.
Zbang! Excepție: clasa SplitContainer nu poate fi convertită în ISupportInitialize.
Ce-i asta? Eu eu nu făcut așa ceva în ultimii 5 ani. Descopăr sursa problemei: probabil din cauză că în joaca mea de-a IDE-ul-vesel-și-programatorul-plăcut-impresionat am atins un SplitContainer, în designer, au apărut două noi linii de cod:
CType(Me.SplitContainerChat, System.ComponentModel.ISupportInitialize).BeginInit()
[…]
CType(Me.SplitContainerChat, System.ComponentModel.ISupportInitialize).EndInit()
Săreau în ochi: erau singurele din fișier care începeau cu CType.
Nu reușesc să-mi dau seama de ce, dacă tot au vrut, nu au scris pur și simplu:
Me.SplitContainerChat.EndInit()
Îmi dădeau șansa să prind problema la compilare la trecerea înapoi spre Framework 3.5 ceea ce era aproape acceptabil. Așa cum au făcut, nu doar că e discutabil ca și performanță dar introduce probleme de care te vei da cu capul la runtime, te miri cînd, cum și unde.
Parcă e făcută deliberat. E ca și cînd designerul și-a dat seama că nu va merge dar știa că trebuie să compilez degrabă așa că a vrut să-mi facă o surpriză frumoasă în eventualitatea cînd voi trece înapoi la 3.5, să nu mai pierd vremea cu erori la compilare.
Cum poate fi cineva sigur că proiectul nu i-a fost compromis cu vreo 20 de astfel de ghidușii plasate bine ici și colo și pe care nu va avea șansa să le găsească la compilare ci i le va înmîna cu încredere utilizatorului care va constata că nimic nu mai merge cum mergea pe vremea cînd aplicațiile îi erau compilate cu bunul și încercatul 2008. Cumplită concluzie.
Învățături (de minte):
- nu vă jucați la ținta
- bucurați-vă de subversion sau vss (dacă îi mai spune așa)
- nu vă lăsați vigilența adormită de fluiditatea din IDE.