【发布时间】:2020-12-25 12:36:11
【问题描述】:
我在 Windows 10.0.18363.959 上使用 PowerShell 5.1.18362.752
当尝试像这样在 PowerShell 中编译 C# 或 VB.NET 代码时:
$Source = @'
Imports Microsoft.VisualBasic
Imports System
Public NotInheritable Class MainClass
Public Shared Sub Main()
Console.WriteLine($"{True}")
End Sub
End Class
'@
$vbType = Add-Type -TypeDefinition $Source `
-CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
-PassThru `
-ReferencedAssemblies "Microsoft.VisualBasic.dll", `
"System.dll" `
| where { $_.IsPublic }
[MainClass]::Main()
$Console = [System.Console]
$Console::WriteLine("Press any key to exit...")
$Console::ReadKey($true)
Exit(0)
我收到编译器错误,因为 '$' 字符用于字符串插值:
C:\Users\Administrador\AppData\Local\Temp\oshdpbp1\oshdpbp1.0.vb(12) : >>> Console.WriteLine($"{1}")
我知道我可以改用 String.Format() 函数,但我想知道是否可以在不修改原始 VB.NET 代码的情况下解决此问题(当然它可以直接在 Visual Studio 上编译)。
请注意,VB14 中添加了字符串插值。也许我错过了如何指定正确的 VB 编译器版本,我不知道如何使用 PowerShell。
【问题讨论】:
-
Console.WriteLine($"{1}")这行没有任何问题 - 错误信息是什么? -
@Andrew Morton 正如我解释的那样,这是由于“$”字符所致。错误消息是:“不是有效字符”。如果我删除“$”字符,那么它编译时不会出错。
-
你需要从 powershell 的插值中转义 $ (即使用反引号
`$"{True}")还是它肯定来自 vb 编译器? -
@pinkfloydx33 肯定来自 vb 编译器。
标签: c# .net vb.net powershell