我正在尝试在我的嘘声代码中使用.NET
汇编Microsoft.VisualBasic
看起来像这样:
import System
import Regex from System.Text.RegularExpressions
import Interaction from Microsoft.VisualBasic
import Microsoft.VisualBasic
## import Reflection.Assembly
## path="""C:\Windows\winsxs\msil_microsoft.visualbasic_b03f5f7f11d50a3a_6.1.7100.0_none_29f6b89369881fe4\Microsoft.VisualBasic.dll"""
## f=Reflection.Assembly.Load(Reflection.Assembly.LoadFile(path).ToString())
## Interaction.Beep()
for i in Regex.Matches("def jam(this)","\\w+"):
print i
arr=array(range(10))
print List(arr)
Array.Reverse(arr)
print List(arr)
使用import Microsoft.VisualBasic
时出现错误:
test.boo(9,1): BCE0005: Unknown identifier: 'Interaction'.
使用import Interaction from Microsoft.VisualBasic
时:
test.boo(4,8): BCE0167: Namespace 'Interaction' not found in assembly 'Microsoft.VisualBasic'
当我尝试以这种方式加载dll时,它仍然不起作用:
Reflection.Assembly.Load(Reflection.Assembly.LoadFile(path))
上面的方法可以在Powershell中使用:
PS C:\mine> [reflection.assembly]::loadfile("C:\Windows\winsxs\msil_microsoft.visualbasic_b03f5f7f11d50a3a_6.1.7100.0_none_29f6b89369881fe4\Microsoft.VisualBasic.dll")
GAC Version Location
--- ------- --------
True v2.0.50727 C:\Windows\assembly\GAC_MSIL\Microsoft.VisualBasic\8.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll
PS C:\mine> [microsoft.visualbasic.interaction]::beep()
我也可以使用LoadWithPartialName
,[Reflection.Assembly]::loadwithPartialName('Microsoft.VisualBasic')
,但已被弃用。
如何使这项工作?
答案 0 :(得分:1)
我终于找到了解决方案。结果问题是我编译它的方式。我使用的是booc.exe test.boo
,而不是添加对Microsoft.VisualBasic
的引用。您甚至不需要使用Reflection.Assembly
加载它,只需导入它,使用它并使用booc.exe test.boo -r:Microsoft.VisualBasic.dll
进行编译。提供dll
的完整路径也可以。我猜Powershell
和boo
有不同的方式来访问.NET
程序集。