【问题标题】:Indirect load of type fails in PowerShellPowerShell 中类型的间接加载失败
【发布时间】:2013-09-04 02:29:34
【问题描述】:

调用时

[System.Configuration.ConfigurationManager]::GetSection("MySection")

在 PowerShell 提示符中,它会引发异常,因为无法加载包含应用配置中“MySection”表示的类型的程序集。但是,我之前已经加载了包含该类型的程序集,我什至可以使用“new-object”直接实例化该类型。

ConfigurationManager 如何解析类型以使已加载到 PowerShell 应用程序域的程序集对其不可见?

【问题讨论】:

  • 上周我遇到了这个确切的问题。希望你能得到答案,因为我从来没有弄清楚。
  • 我想我在这里找到了问题:msdn.microsoft.com/en-us/library/ms228245.aspx 看来“type”元素中定义的程序集必须与配置文件位于同一目录中。它说'web.config',但我认为可以安全地假设它可以扩展到应用程序配置。仅供参考之前做出回应的人...我没有尝试创建静态 ConfigurationManager 实例。有问题的类型,我试图创建的类型,是应用程序配置文件中定义的类型......“MySection”引用的类型。

标签: powershell


【解决方案1】:

您究竟是如何加载程序集的?绑定上下文很重要:

http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx

-奥辛

【讨论】:

  • 它是使用 Assembly.LoadFrom 加载的。至于究竟是如何通过 GetSection 间接加载程序集的,我不知道。但我认为 MS 文档清楚地表明,在应用程序配置文件的情况下,程序集位置很重要。
  • 是的,GetSection 将探测托管进程私有路径中的程序集,即 powershell.exe。新建一个应用域然后将字符串数据编组出来可能更容易。这写起来并不难,即使在 powershell 脚本中也是如此。
【解决方案2】:

尝试将 app_config_file 位置更改为您自己的应用配置文件的路径,该文件指定包含您的 DLL 的目录的私有探测路径。请参阅此SO post for more details。这适用于连接字符串数据,但我不确定它是否适用于应用程序基本目录之外的私有探测路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2014-04-20
    相关资源
    最近更新 更多