|
[ Shadowed @ 09.02.2008. 21:35 ] @
| U pitanju je Visual Studio 2008, asp.net aplikacija koja radi sa .net framework-om 2.0.
Imam u jednoj klasi privatnu promenljivu - Private _ParentID as Integer?. Ima i property istog tipa, obican get/set.
Kada idem na Build > Build website prodje normalno, kada probam da otvorim iz browser-a dobijem Compilation Error:
Compiler Error Message: BC30037: Character is not valid.
Sa obelezenom tom linijom gde je deklarisana privatna promenljiva.
Sad sam upravo probao da umesto na taj nacin deklarisem kao Nullable(Of Integer) i u tom slucaju prodje (ne odgovara mi ovako, ali cisto sam hteo probati). Samo sto mi se tu javlja problem na drugom mestu kada sam imao Return (_ParentID Is Nothing)
Nikako ne kapiram u cemu je problem, s' obzirom da mi sve deluje ispravno. Plus sto mi VS ne prijavljuje gresku a kada pokrenem iz browsera dobijem pomenutu.
Inace, i VS ima neke cudne tripove. Recimo kada sam deklarisao kao Nullable(Of Integer), nije hteo da kompajlira ali ne prikazuje gde je greska (0 errors, 0 warnins)... |
[ mmix @ 10.02.2008. 12:29 ] @
To su sve ispravne 2.0+ konstrukcije. Pogledaj u IIS-u da ti asp.net aplikacija nije podesena da radi sa .NET1.1 frameworkom....
[ Shadowed @ 10.02.2008. 12:52 ] @
Nije IIS, to je iz VS-a, debug.
Edit: Evo probao sam sada i preko IIS-a. Stoji ASP.NET Version: 2.0.50727 (drugu mi i ne nudi). Ista stvar, ista greska na istoj liniji.
[ mmix @ 10.02.2008. 13:16 ] @
Ajd okaci samo to parcence koda, ja nekako ne uspevam da reprodukujem tu gresku.
[ Shadowed @ 10.02.2008. 13:27 ] @
Code:
Public Class Category
Private _ID As Integer
Private _ParentID As Integer?
Private _Name As String
Private _OwnerID As Guid
Private _Tags As List(Of String)
'Onda za svaku od ovih promenljivih imam property sa get/set, navescu samo za tu promenljivu:
Public Property ParentID() As Integer?
Get
Return _ParentID
End Get
Set(ByVal value As Integer?)
_ParentID = value
End Set
End Property
'Konstruktor:
Public Sub New(ByVal ID As Integer, ByVal Name As String, ByVal ParentID As Integer, ByVal OwnerID As Guid, ByVal Tags As List(Of String))
_ID = ID
_Name = Name
_ParentID = ParentID
_OwnerID = OwnerID
_Tags = Tags
End Sub
'I jedan metod:
Public Function GetParent() As Category
If Me.IsRoot Then
Return Nothing
Else
Return DBWorks.GetCategory(Me._ParentID)
End If
End Function
End Class
Edit. Sada, kada probam Start Debugging u VS-u, kaze da postoje greske ali u errors/warnings listi nema nicega, s' tim da u Output prozoru imam ukazano na svaku od tih linija gde imam nullable deklaraciju (promenljiva, property i DBWorks.GetCategory() )
[ mmix @ 10.02.2008. 13:47 ] @
Kod mene prolazi sasvim fino. Nesto ti je do instalacije VS-a
[ Shadowed @ 10.02.2008. 13:54 ] @
Ali me cudi zasto onda isti problem pravi i iis. Probacu repair danas/sutra pa cu videti, mada nisam bas optimista.
Sto se meni stalno desavaju ovak'e gluposti...
[ mmix @ 10.02.2008. 14:02 ] @
Predji na C# 
[ maksvel @ 10.02.2008. 22:12 ] @
Ovaj, je l' sigurno može Nullable da se predstavi i u VB skraćeno sa "tip?"? Meni odmah stavlja grešku u web-Developer-u "Character is not valid".
Hm, to ima veze sa verzijom framework-a, ne? Kao da Studio "pregleda po novom", a kompilacija radi po starom 
[ Shadowed @ 10.02.2008. 23:02 ] @
MSDN kaze:
You can write the declaration in three ways:
Code:
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
E sad, to je MSDN dobijen uz VS2008 a tu ne pise na koji se VB odnosi i ja bih poverovao da u VB2005 ne moze taj nacin, sa ? pogotovo sto i ovaj tekst govori tako nesto ali kako onda mmix-u radi??
Mmix, jesi stavio da je 2.0 target framework?
[ Shadowed @ 11.02.2008. 00:39 ] @
Yep, na ekvivalentu te strane za Framework 2.0 navodi samo deklaraciju kao Nullable(of type). http://msdn2.microsoft.com/en-us/library/ms235245(VS.80).aspx
Sad ostaje samo pitanje kako je mmix to izveo, mada me od njega ne bi cudilo da je zeznuo MS :]
Bah, bas je ruzno ovako. A dvoumio sam se zbog jos nekih stvari (linq) da radim sa 3.5, ali pretpostavljam da jos uvek nije zastupljen dovoljno (radim aplikaciju za "serijsku proizvodnju", ne za jednog klijenta).
[ mmix @ 11.02.2008. 11:54 ] @
Citat: Shadowed: Sad ostaje samo pitanje kako je mmix to izveo, mada me od njega ne bi cudilo da je zeznuo MS :]
Ako koza laze, rog ne laze  Zakacen se sample projekat asp.net aplikacija radjena za target 2.0 i koristi Integer?
[ Shadowed @ 11.02.2008. 12:28 ] @
Probaj staviti u App_Code. To je jedina razlika koju vidim u odnosu na moj projekat.
BTW, sta ce
Code:
<add namespace="System.Linq"/>
<add namespace="System.Xml.Linq"/>
u web.config-u za 2.0 :)
Isto i u .proj fajlu. Mada stoji da je target framework 2.0 u tom istom .proj fajlu (sve sam gledao iz winrar viewer-a, nisam otvrao u VS-u, ne mogu sada). To se meni desavalo kada naknadno promenim framework umesto kada ga odredim prilikom kreiranja projekta. Pretpostavljam da je to neki bug u VS-u.
[ mmix @ 11.02.2008. 12:30 ] @
DIjagnosticki govoreci, to ne moze biti do verzije frameworka, bez obzira na verziju 2.0, 3.0 ili 3.5, framework barata sa MSILom koji nulable tipove uvek deklarise sa Nullable<type>.
? je kompajlerska logika i ako se ne prepoznaje onda je to do kompajlera nesto. Iako vs2008 moze da bira target, on efektivno za sve targete koristi isti kompajler, znate zasto? Zato sto .net 3.0 i 3.5 nisu prave verzije .NETa nego su najboljem slucaju verzije 2.1 i 2.2. Za sve tri verzije se koristi IDENTICAN CLS/CLI baziran na verziji 2.0. Jedino sto se menja odabriom targeta je koje ce verzije assemblija biti ukljucene u reference i sta ce od UI elemenata biti dostupno (npr nema WCF-a pod 2.0). Samim tim kompajler zna sta je ? bez obzira sto u visual studiu 2005 nije znao.
Jednostavan trik, pogledaj output window pri bildu i vidi putanju do VBC.exe fajla. Ako nije "C:\WINDOWS\Microsoft.NET\Framework\v3.5\Vbc.exe" onda ti VS podize bajati kompajler
[ mmix @ 11.02.2008. 12:37 ] @
Citat: Shadowed: Probaj staviti u App_Code. To je jedina razlika koju vidim u odnosu na moj projekat.
E to je puklo. Ali evo i objasnjenja, pogledaj u Detailed compiler output:
Code:
c:\windows\system32\inetsrv> "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\vbc.exe" /t:library /utf8output ....
Microsoft (R) Visual Basic Compiler version 8.0.50727.1433
for Microsoft (R) .NET Framework version 2.0.50727.1433
Copyright (c) Microsoft Corporation. All rights reserved.
C:\Projects\WindowsApplication2005\SampleVBASP\App_Code\Class1.vb(2) : error BC30037: Character is not valid.
Private _ParentID As Integer?
~
Koja verzija kompajlera prevodi? 2.0
Resenje je jednostavno, ne stavljaj code u App_Code, to ti nije neophodno i sluzi samo da mozes code da menjas on-the-fly bez rebuild-a sajta. Najelegantnije resenje je da sve klase potrpas u poseban class library projekat i da ga referenciras sa sajta.
[ Shadowed @ 11.02.2008. 13:08 ] @
Da, jasno, samo sam ja u pocetku mislio da bi upravo 2.0 kompajler trebao da prevodi dobro. Ovo mi deluje glupo sto koristi drugaciji kompajler ako je kod u app_code i ako nije.
Mislim da cu na kraju i uraditi tako sa dva projekta. Zapravo nisam hteo jer koristim i source safe pa mi delovalo da cu zakomplikovati nesto :)
Sta mislis koliko je dobra ideja raditi sa najnovijom verzijom i vb-a i framework-a? Znam da zavisi od vrste projekta, al' malo to nisam sada u mogucnosti da objavljujem ovde...
[ mmix @ 11.02.2008. 15:30 ] @
To ne zavisi od projekta nego od toga da li si u stanju ili ne da na mestu instalacije pustis novi framework. Ako je dozvoljeno polisama, onda jednostavno ukljucis framework u instalaciju i vozis najnovije
Problem je sto asp.net nema handler za iznad v2.0, tako da je code u app_code UVEK za kompajler iz v2.0  cak i da imas instaliran framework 3.5 opet ce kod iz tog foldera biti kompajliran sa 2.0 kompajlerom, sto je po meni totalna glupost.
Inace, app_code sors se prevodi sa drugim kompajlerom zato sto njega ne prevodi visual studio, nego sam asp.net.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|