Командлет Add-Type: возможно ли указывать набор файлов DLL вместо имен сборок?
Мне нужно запустить командлет в PowerShell, размещенный внутри AutoCAD. Сборки AutoCAD (это хост PowerShell) не находятся в GAC. Как я могу правильно указать сборки AutoCAD? Можно ли указать набор файлов DLL вместо имен сборок? Все необходимые сборки уже загружены в текущий AppDomain.
$asm = ([System.AppDomain]::CurrentDomain.GetAssemblies()) | where { `
($_.FullName).StartsWith("acdbmgd") -or ($_.FullName).StartsWith("acmgd") `
-or ($_.FullName).StartsWith("accoremgd")}
$src =[Io.File]::ReadAllText(($PSScriptRoot + "../Resources/example.cs"))
Add-Type -ReferencedAssemblies $asm -TypeDefinition $src -Language CSharp
# Launch our static `Bushman.CAD.PowerShellUtils.Example.WriteMsg()` method:
[Bushman.CAD.PowerShellUtils.Example]::WriteMsg("`nHello from CS-file!`n")
Это код ../Resources/example.cs
файл:
using System;
using Autodesk.AutoCAD.Runtime;
using cad = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
namespace Bushman.CAD.PowerShellUtils {
public class Example {
public static void WriteMsg(String msg) {
Document doc = cad.DocumentManager.MdiActiveDocument;
if (null == doc || String.IsNullOrEmpty(msg)) {
return;
}
Editor ed = doc.Editor;
ed.WriteMessage(msg);
}
}
}
Но я получаю ошибки:
Имя типа или пространство имен "DatabaseServices" отсутствует в пространстве имен "Autodesk.AutoCAD" (ссылка на сборку передается?).
Имя типа или пространство имен "Приложение" отсутствует в пространстве имен "Autodesk.AutoCAD.ApplicationServices" (ссылка на сборку передается?)
Как я могу это исправить?
1 ответ
Решение
Да, это возможно. Вам нужно использовать Location
собственностью Assembly
объект:
$asm = @(
[System.AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object {
$_.FullName.StartsWith("acdbmgd") -or
$_.FullName.StartsWith("acmgd") -or
$_.FullName.StartsWith("accoremgd")
} |
Select-Object -ExpandProperty Location
)