【问题标题】:C# cmdlet dll that references other project dll fails on load引用其他项目 dll 的 C# cmdlet dll 在加载时失败
【发布时间】:2017-02-24 16:27:14
【问题描述】:

我有一个用作 PowerShell cmdlet 的 C# 项目 - 这应该是产品主要功能的 API - 所以我必须在我的 PowerShell 库中引用很多 dll。

我的问题是客户希望从任何位置加载 PowerShell dll,而不将工作目录设置为所有 dll 所在的程序文件夹。但是,如果我通过将工作目录设置为程序文件夹的快捷方式打开 Powershell,我只能使用我的 PowerShell 命令,如下所示:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -noexit -command "[reflection.assembly]::loadFrom('.\PSAPI.dll') | import-module"

并将工作目录设置为已安装产品的程序文件夹。

如果我只是使用

[Reflection.Assembly]::LoadFile("C:\Program Files(x86)\MyProduct\PSAPI.dll")

[Reflection.Assembly]::LoadFrom("C:\Program Files(x86)\MyProduct\PSAPI.dll")

它总是失败。是否有解决方案(无需将所有文件复制到 PowerShell 文件夹)?

这是我尝试的方法和我得到的错误 - 我无法以其他方式设置引用的 dll - .NET 应用程序正在工作目录中查找引用的 dll - 我在 powershell 中设置工作目录以确保我'在正确的目录中,但它不会加载我的模块

[reflection.assembly]::loadFrom( 'C:\Program Files (x86)\ASG-Remoteesktop 2016\ASGRD-PSAPI.dll' ) | import-module

使用“1”参数调用“LoadFrom”的异常:“无法加载文件或 程序集 'file:///C:\Program Files (x86)\ASG-Remoteesktop 2016\ASGRD-PSAPI.dll' 或其依赖项之一。系统找不到 指定文件。” 在行:1 字符:1 + [reflection.assembly]::loadFrom('C:\Program Files (x86)\ASG-Remoteesktop 2016\A ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FileNotFoundException

【问题讨论】:

    标签: c# powershell powershell-cmdlet


    【解决方案1】:

    在这里猜测,因为您没有提供错误,但如果它在同一个目录而不是另一个目录中工作,则可能是 C# DLL 使用了相对路径。

    当当前目录为C:\Program Files(x86)\MyProduct 时,无论您使用完整路径还是仅使用Resources\MyFile.dat,两者都将在同一个位置结束。但是,如果您在 root C: 中,则相对路径将查找当然不存在的 C:\Resources\MyFile.dat。当您使用C:\Program Files(x86)\MyProduct\Resources\MyFile.dat 时,当前目录是什么并不重要,它始终可以工作。

    检查您的 C# DLL 是否有任何相对路径,并临时更改工作目录或改用绝对路径。

    【讨论】:

      【解决方案2】:

      一种方法可能是:将您的程序集路径 C:\Program Files(x86)\MyProduct 添加到 PSModulePath 环境变量。完成后,您可以执行import-module -name <name of your module>,它将从您的文件夹中加载它。在这种情况下,您不需要显式加载程序集(很可能)。

      如需了解更多详情,请在 powershell 中执行以下命令并查看-name 参数的详细信息。

      get-help import-module -detailed

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2019-11-21
        • 2020-02-28
        • 2012-12-21
        相关资源
        最近更新 更多