Add-Type от cs, требующий ссылки на сборки - PullRequest
5 голосов
/ 24 ноября 2011

У меня есть файл CS с очень простым кодом:

using Ionic.Zip;
public static class Helper
{
        public static ZipFile GetNewFile(string fileName)
        {       
            return new ZipFile(fileName);
        }
}

Требуется сборка Ionic.Zip. Я хочу добавить этот тип к моей PowerShell следующим образом:

cd c:\pst
Add-Type -Path "2.cs" -ReferencedAssemblies "Ionic.Zip.dll"
$var = [Helper]::GetNewFile("aaa")

Когда я делаю это, это дает мне:

The following exception occurred while retrieving member "GetNewFile": "Could not load file or assembly 'Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c' or one of its dependencies. The located assembly'
s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"

Похоже, что скомпилированная сборка находится в каком-то временном местоположении и не может найти Ionic.Zip там.

Однако это работает, если указать выходную сборку, а затем добавить эту сборку:

cd c:\pst
Add-Type -Path "2.cs" -ReferencedAssemblies "Ionic.Zip.dll" -OutputAssembly "T.dll"
Add-Type -Path "T.dll"

$var = [Helper]::GetNewFile("aaa")
$var.AlternateEncoding

Так что мне интересно, есть ли способ избежать использования выходной сборки?

Ответы [ 2 ]

6 голосов
/ 24 ноября 2011

В Powershell v3 CTP1 вы можете указать полный путь (полное имя) вашей zip-библиотеки и указать, что:

$ziplib = (get-item ionic.zip.dll).fullname
[void][reflection.assembly]::LoadFrom($ziplib)
Add-Type -Path "2.cs" -ReferencedAssemblies $ziplib
$var = [Helper]::GetNewFile("aaa")
$var.AlternateEncoding
1 голос
/ 24 ноября 2011

Вы должны поместить свой файл ionic.zip.dll в GAC , затем на powershell вы можете сделать это:

C:\ps> [System.Reflection.Assembly]::LoadWithPartialName("ionic.zip")
C:\ps> Add-Type -Path "2.cs" -ReferencedAssemblies "Ionic.Zip.dll"
C:\ps> $var = [Helper]::GetNewFile("aaa")
C:\ps> $var.name
aaa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...