2013-08-20 4 views
0

Я пытаюсь использовать .NET сборку Microsoft.VisualBasic в моем коде, который бу
Как вы загрузить сборку в Boo

выглядит следующим образом:

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 сборок.