PowerShell не может вызвать простую функцию из ASP.NET DLL - PullRequest
1 голос
/ 30 ноября 2010

Я пытаюсь вызвать эту действительно простую функцию .NET 4 с PowerShell v2. Его определение выглядит так:

Публичная общая функция currentSchoolYear () As String Член NM4.SiteAdmin.Logic.Subscription

Давайте добавим путь к файлу DLL, содержащему эту функцию. Это файл DLL веб-приложения ASP.NET MVC .

PS> Add-Type -Path C: \ xxx \ bin \ xxxWebApp.dll

Давайте попробуем (FAIL!):

PS>
[NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear ()
Исключение, вызывающее "currentSchoolYear"
с аргументом "0": "тип
инициализатор для
'NM4.SiteAdmin.Logic.Subscription'
бросил исключение. "В строке: 1 символ: 54
+ [NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear
<<<< () <br /> + CategoryInfo: Не указано: (:) [],
MethodInvocationException
+ FullyQualifiedErrorId: DotNetMethodException

Давайте рассмотрим класс из PowerShell:

PS>
[NM4.SiteAdmin.Logic.Subscription]

IsPublic IsSerial Name
BaseType

-------- -------- ---- -------- True False Subscription
System.Object

Давайте рассмотрим функцию из PowerShell

PS>
[NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear


MemberType: метод
OverloadDefinitions: {статическая строка
currentSchoolYear ()} TypeNameOfValue
:
System.Management.Automation.PSMethod
Значение: статическая строка
currentSchoolYear () Имя
: currentSchoolYear IsInstance
: True

Почему? Мне кажется, что это документ.

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Я использовал эту команду, чтобы получить более подробную информацию об ошибке:

$ ошибка | Format-List -force

Который затем бросил этот более точный пример:

System.NullReferenceException: объект
ссылка не установлена ​​на экземпляр
объект.
на
NM4.SiteAdmin.GlobalFunctions.EstMachineProduction ()
в
C: \ xxx \ Old_App_Code \ DataModel \ GlobalFunctions.vb: строка
17

И я обнаружил, что произошел сбой вызова web.config:

Возврат
ConfigurationManager.ConnectionStrings.Item ( "test_DBNM4"). ConnectionString

DLL-файлы, загружаемые PowerShell, вероятно, находятся не в своем обычном веб-контексте. Я жестко запрограммировал ConnectionString для его проверки (временно, не очень хорошая практика безопасности), и он работает.

0 голосов
/ 30 ноября 2010

Звучит как исключение в статическом конструкторе ИЛИ . Тип, от которого зависит NM4.SiteAdmin.Logic.Subscription, не может быть загружен.Я предполагаю, что «C: \ xxx \ bin \ xxxWebApp.dll» и друзей нет в GAC, и вы не запускаете из «C: \ xxx \ bin \», поэтому powershell не может разрешить зависимости.Попробуйте запустить это из "C: \ xxx \ bin \".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...