fin de compte, ce n'est pas tous de VB.NET qui est cassé - juste le CodeDomProvider (qu'utilisent à la fois ASP.NET et Snippet Compiler).
Compte tenu d'un simple fichier source:
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
avec la version vbc.exe Compiler 9.0.30729.1 (.NET FX 3.5):
> vbc.exe default.vb /out:out.exe
> out.exe
Not Debug!
Ce sens ... Je ne l'ai pas définir DEBUG, donc il montre "Pas de débogage!".
> vbc.exe default.vb /out:out.exe /debug:full
> out.exe
Not Debug!
Et, en utilisant 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!
Ok, encore une fois - qui fait sens. Je n'ai pas défini DEBUG, donc il affiche "Pas de débogage". Mais, et si j'incluais les symboles de débogage?
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!
Hmm ... Je n'ai pas défini DEBUG, mais peut-être l'a-t-il défini pour moi? Mais si c'est le cas, il doit l'avoir défini comme "1" - parce que je ne peux pas obtenir ce comportement avec une autre valeur. ASP.NET, en utilisant le CodeDomProvider, must define it the same way.
On dirait que le CodeDomProvider trébuche sur le stupide psuedo-logical operators de VB.NET.
Moral de l'histoire? #If Not
n'est pas une bonne idée pour VB.NET.
Et maintenant, cette source est disponible, je peux verify that it does actually set it equal to 1 comme je m'y attendais:
if (options.IncludeDebugInformation) {
sb.Append("/D:DEBUG=1 ");
sb.Append("/debug+ ");
}
fonctionne bien pour moi, la première affiche simplement Debug en mode débogage et non Debug, pas de débogage en mode de sortie . Êtes-vous sûr de ne pas avoir quelque chose de «bizarre» dans les paramètres de votre projet? –
Hmmm ... J'ai essayé à la fois avec VS2008 dans un projet ASP.NET existant, puis Snippet Compiler. Je vais essayer un nouveau projet de console et voir ce qui se passe. –
C'était une nouvelle application de console j'ai essayé. –