По поводу перекидывания кода из PowerShellFar скриптов в .NET (на случай если кто надумает, по соображениям производительности, разве что). Есть два пути (как минимум).
Первый путь:
Довольно очевидный - создаем плагин второго уровня для Far.NET, тут пояснять особо нечего - имплементируем класс плагина, добавляем меню и т.п. по откатанной схеме. Имеет смысл применить, если сам PowerShell не планируется активно использовать, а только этот плагин.
Второй путь:
Имеет смысл применить, если PowerShell активно используется все равно (даже при унесении части кода в .NET). Создаем обычную библиотеку классов, зависимую от сборки FarNetIntf.dll (Far.NET интерфейсы) и в ней класс(ы) типа такого (пример на C#):
Code: Select all
using System;
using FarManager;
namespace ClassLibrary1
{
public class Class1
{
IFar _far;
public Class1(IFar far)
{
_far = far;
}
public bool HelloWorld(string title)
{
return _far.Msg("Hello World", title);
}
}
}
Вот и все, что нужно. Осталось вызвать наш оптимизированный переносом в .NET код HelloWorld() из PowerShell кода.
Code: Select all
# грузим библиотеку, можно в профайле, если используем почти всегда
[void][System.Reflection.Assembly]::LoadFrom("<path>\HelloWorld.dll")
# создаем наш класс и передаем туда $Far (эта сборка все-таки для него)
$Hello = New-Object ClassLibrary1.Class1 $Far
# используем, что хотим из паблик членов у нашего Class1
$result = $Hello.HelloWorld("This is example of parameter")
Итак, преимущества такого пути:
*) такая сборка - это не плагин, а значит не нужны накладные расходы по имплементации плагина.
*) грузим сборку только по необходимости: LoadFrom грузит библиотеку только при первом вызове.
*) методы такой сборки доступны всем скриптам, в отличие от кода, унесенного в реальный плагин.