PowerShell无法从ASP.NET DLL调用简单函数

时间:2010-11-30 00:01:40

标签: .net powershell

我试图用PowerShell v2称这个非常简单的.NET 4函数。它的定义如下:

  

公共共享功能   currentSchoolYear()As String        NM4.SiteAdmin.Logic.Subscription

的成员

让我们添加包含该函数的DLL文件的路径。这是一个ASP.NET MVC Web应用程序DLL文件。

  

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

我们试试吧(失败!):

  

PS>
  [NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear()
  称为“currentSchoolYear”的例外情况   “0”参数:“类型
  初始化器为   'NM4.SiteAdmin.Logic.Subscription'
  抛出一个例外。“在线:1个字符:54个   + [NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear
  <<<< ()
      + CategoryInfo:未指定:(:) [],
  MethodInvocationException
      + FullyQualifiedErrorId:DotNetMethodException

让我们从PowerShell中观察这个类:

  

PS>
  [NM4.SiteAdmin.Logic.Subscription]
  
  IsPublic IsSerial名称
  BaseType
  
  -------- -------- ---- --------真假订阅
  System.Object

让我们观察PowerShell的功能

  

PS>
  [NM4.SiteAdmin.Logic.Subscription] :: currentSchoolYear
  
  
  MemberType:方法
  OverloadDefinitions:{静态字符串
  currentSchoolYear()} TypeNameOfValue
  :
  System.Management.Automation.PSMethod
  值:静态字符串
  currentSchoolYear()名称
  :currentSchoolYear IsInstance
  :正确

为什么哦为什么?对我来说,这似乎是文档。

2 个答案:

答案 0 :(得分:3)

我使用此命令获取有关错误的更多详细信息:

  

$ error | Format-List -force

然后抛出了这个更精确的例子:

  

System.NullReferenceException:对象
  引用未设置为实例   宾语。
                             at
NM4.SiteAdmin.GlobalFunctions.EstMachineProduction()
  在   C:\ xxx \ Old_App_Code \ DataModel \ GlobalFunctions.vb:line
  17

我发现这是对web.config的调用失败:

  

返回
  ConfigurationManager.ConnectionStrings.Item( “test_DBNM4”)。ConnectionString的

PowerShell加载的DLL文件可能不在他们通常的Web上下文中。我硬编码了一个ConnectionString来测试它(临时,不是一个好的安全实践),它正在工作。

答案 1 :(得分:0)

这听起来像静态构造函数 OR 中的异常,无法加载NM4.SiteAdmin.Logic.Subscription所依赖的类型。我假设“C:\ xxx \ bin \ xxxWebApp.dll”并且朋友不在GAC中并且您没有从“C:\ xxx \ bin \”运行,因此powershell无法解析依赖关系。尝试从“C:\ xxx \ bin \”运行它。