बाहर है, यह नहीं सभी VB.NET का टूटा हुआ है - बस CodeDomProvider (जो एएसपी.नेट और स्निपेट कंपाइलर दोनों का उपयोग करता है)।
एक सरल स्रोत फ़ाइल को देखते हुए:
Imports System
Public Module Module1
Sub Main()
#If DEBUG Then
Console.WriteLine("Debug!")
#End If
#If Not DEBUG Then
Console.WriteLine("Not Debug!")
#End If
End Sub
End Module
vbc.exe संस्करण 9.0.30729.1 साथ संकलन (.NET FX 3.5):
> vbc.exe default.vb /out:out.exe
> out.exe
Not Debug!
समझ में आता है कि ... मैंने नहीं किया DEBUG को परिभाषित करें, इसलिए यह दिखाता है "डीबग नहीं!"।
> vbc.exe default.vb /out:out.exe /debug:full
> out.exe
Not Debug!
और, CodeDomProvider का उपयोग कर:
Using p = CodeDomProvider.CreateProvider("VisualBasic")
Dim params As New CompilerParameters() With { _
.GenerateExecutable = True, _
.OutputAssembly = "out.exe" _
}
p.CompileAssemblyFromFile(params, "Default.vb")
End Using
> out.exe
Not Debug!
ठीक है, फिर - कि समझ में आता है। मैंने DEBUG को परिभाषित नहीं किया है, इसलिए यह "डीबग नहीं" दिखाता है। लेकिन, अगर मैं डीबग प्रतीकों को शामिल करता हूं तो क्या होगा?
Using p = CodeDomProvider.CreateProvider("VisualBasic")
Dim params As New CompilerParameters() With { _
.IncludeDebugInformation = True, _
.GenerateExecutable = True, _
.OutputAssembly = "C:\Users\brackett\Desktop\out.exe" _
}
p.CompileAssemblyFromFile(params, "Default.vb")
End Using
> out.exe
Debug!
Not Debug!
हम्म ... मैंने डेबग को परिभाषित नहीं किया है, लेकिन शायद यह मेरे लिए परिभाषित किया गया है? लेकिन अगर ऐसा होता है, तो इसे इसे "1" के रूप में परिभाषित करना होगा - क्योंकि मैं उस व्यवहार को किसी अन्य मूल्य से नहीं प्राप्त कर सकता। ASP.NET, CodeDomProvider का उपयोग करके, must define it the same way।
ऐसा लगता है कि CodeDomProvider VB.NET के बेवकूफ psuedo-logical operators पर जा रहा है।
कहानी का नैतिक? #If Not
वीबी.नेट के लिए एक अच्छा विचार नहीं है।
और अब है कि स्रोत उपलब्ध है, मैं verify that it does actually set it equal to 1 के रूप में मैं उम्मीद कर सकते हैं: मेरे लिए
if (options.IncludeDebugInformation) {
sb.Append("/D:DEBUG=1 ");
sb.Append("/debug+ ");
}
वर्क्स ठीक, पहले एक को प्रदर्शित करता है बस डीबग मोड में डिबग और नहीं डिबग, रिलीज मोड में डीबग नहीं । क्या आप वाकई अपने प्रोजेक्ट सेटिंग्स में कुछ "wierd" चल रहे हैं? –
हमम ... मैंने इसे मौजूदा एएसपी.NET प्रोजेक्ट में VS2008 के साथ और फिर स्निपेट कंपाइलर में दोनों की कोशिश की है। मैं एक नया कंसोल प्रोजेक्ट आज़माउंगा और देखें कि क्या होता है। –
यह एक नया कंसोल ऐप था जिसकी मैंने कोशिश की थी। –