Resulta que, no es todo de VB.NET que está roto, solo el CodeDomProvider (que tanto ASP.NET como Snippet Compilador usan).
Dado un archivo de fuente simple:
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
Compilar con la versión 9.0.30729.1 vbc.exe (.NET FX 3.5):
> vbc.exe default.vb /out:out.exe
> out.exe
Not Debug!
Eso tiene sentido ... no lo hice define DEBUG, por lo que muestra "No depurar!".
> vbc.exe default.vb /out:out.exe /debug:full
> out.exe
Not Debug!
Y, usando 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!
bien, una vez más - que tiene sentido. No definí DEBUG, por lo que muestra "No depurar". Pero, ¿y si incluyo símbolos de depuración?
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 ... No definí DEBUG, pero ¿acaso lo definió para mí? Pero si lo hizo, debe haberlo definido como "1", porque no puedo obtener ese comportamiento con ningún otro valor. ASP.NET, utilizando CodeDomProvider, must define it the same way.
Parece que CodeDomProvider se está tropezando con el estúpido psuedo-logical operators de VB.NET.
¿Moral de la historia? #If Not
no es una buena idea para VB.NET.
Y ahora que la fuente está disponible, puedo verify that it does actually set it equal to 1 como yo esperaba:
if (options.IncludeDebugInformation) {
sb.Append("/D:DEBUG=1 ");
sb.Append("/debug+ ");
}
funciona bien para mí, el primero se muestra acaba de depuración en modo de depuración y no de depuración, no de depuración en modo de lanzamiento . ¿Estás seguro de que no tienes algo "raro" en la configuración de tu proyecto? –
Hmmm ... Lo he intentado tanto con VS2008 en un proyecto ASP.NET existente, y luego compilador de fragmentos. Probaré un nuevo proyecto de consola y veré qué sucede. –
Era una nueva aplicación de consola que probé. –