Как вы загружаете сборку в бу
Я пытаюсь использовать .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')
но это устарело.
Как мне сделать эту работу?
1 ответ
Наконец-то я нашел решение. Оказывается, проблема была в том, как я его компилировал. Я использовал booc.exe test.boo
вместо добавления ссылки на Microsoft.VisualBasic
, Вам даже не нужно загружать его с помощью Reflection.Assembly
, вы просто импортируете его, используете его и компилируете с booc.exe test.boo -r:Microsoft.VisualBasic.dll
, Предоставление полного пути к dll
тоже будет работать. Похоже Powershell
а также boo
есть разные способы доступа .NET
сборок.