В PowerShell объект не загружается, хотя я вызываю LoadWithPartialName - PullRequest
2 голосов
/ 29 марта 2012

У меня есть файл .ps1, который я выполняю из приглашения PS. В верхней части файла у меня есть:

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

и далее в коде:

$site = new-object Microsoft.SharePoint.SPSite $url;

Я получаю следующую ошибку:

Невозможно найти тип [Microsoft.SharePoint.SPWeb]: убедитесь, что сборка, содержащая этот тип, загружена.

Если я запускаю оператор LoadWithPartialName непосредственно из приглашения, тогда я могу выполнить сценарий.

Что я делаю не так?

- Обновление -

Когда я убираю пустоту, делаю код:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

ошибка не изменяется, поскольку LoadWithPartialName выполняется без ошибок.

- Новая информация -

Это связано с добавлением функции с типизированным параметром SPWeb.

Это работает:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

И это работает:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
function doSomething(){ }
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

Но это не работает, если (вы должны начать новый сеанс PS, прежде чем это станет проблемой. Также не имеет значения, работает ли функция до или после первого создания SPSite:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
function doSomething(    [Microsoft.SharePoint.SPWeb] $web  ){ }
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

Я полагаю, что вторым обходным решением является не вводить параметр или загружать нагрузку в другой ps1.

1 Ответ

2 голосов
/ 30 марта 2012

Возможно ли, что эта сборка отсутствует в GAC?Если нет, то он должен быть в каталоге установки PowerShell для LoadWithPartialName, чтобы найти его.К вашему сведению, метод LoadWithPartialName устарел и не рекомендуется.Если вы используете PowerShell V2, попробуйте найти файл SharePoint.dll в вашей файловой системе и использовать Add-Type, например:

Add-Type -Path <path>\Microsoft.SharePoint.dll
...