【问题标题】:powershell locate and load package .dllpowershell 定位并加载包.dll
【发布时间】:2023-02-23 03:49:13
【问题描述】:

使用 PowerShell 和 iCal.Net 包,我想读取一个 .ics 文件。

# install ical.net dependencies
Install-Package NodaTime -Force

# install ical.net package
Install-Package iCal.Net -Force

# variables
$icsfile = "C:\Users\Windows\Desktop\ical\caalendar.ical"
$icsurl = "https://url_to_download/basic.ics"

# download ics file
Invoke-WebRequest $icsurl -OutFile $icsfile

# create new calendar object
$calendar = New-Object Ical.Net.Calendar

在创建新的日历对象时,我收到一条消息说

New-Object : Cannot find type [Ical.Net.Calendar]: verify that the assembly containing this type is loaded.
At line:1 char:13
+ $calendar = New-Object Ical.Net.Calendar
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

我的猜测是即使安装了 ical.net 包,也必须加载它。在研究如何执行此操作时,我发现我需要提供特定 .dll 文件的路径。

我怎样才能找到这个 .ddl 所在的位置,以及如何加载它?

【问题讨论】:

    标签: powershell nuget package-management


    【解决方案1】:

    的确:

    • 尽管Install-Package让你安装通用 NuGet 包(包含用于任何 .NET 语言的 .NET 程序集),有没有直接的 PowerShell 集成使用.

      • GitHub issue #6724 建议通过扩展 Add-Type 使在 PowerShell 中使用 NuGet 包更容易

      • 注意:如果Install-Package 找不到您知道存在的 NuGet 包,您可能必须先升级 PowerShell 的包管理模块,方法是从升高的会议:

        Install-Module PowerShellGet -Force
        
    • 你确实必须:

      • 找到合适的.dll文件包装内

      • 通过Add-Type-LiteralPath加载, 如下所示。

    • 警告是:

      • 从使用 Install-Package 安装的 NuGet 包手动加载程序集不(总是)也自动加载它的依赖.
        然而,它似乎与ICal.Net 一起工作。

      • 如果下面的方法对给定的包不起作用,您将需要使用更麻烦的方法安装它,包括辅助。 .NET SDK 项目,详见this answer


    Ical.NetNuGet包手动加载相关程序集:

    • 通过在线 NuGet Package Explorer 检查包显示在子目录 lib etstandard2.0 中有一个 .NET Standard 2.0 Ical.Net.dll 程序集。 .NET Standard 2.0 程序集与两者兼容Windows PowerShellPowerShell (Core) 7+

    • 您可以从Get-Package返回的包信息对象的.Source属性中推断出使用Install-Package安装的包的本地安装目录。

    所以:

    Add-Type -LiteralPath (Join-Path (Split-Path -Parent (Get-Package ICal.Net).Source) lib
    etstandard2.0Ical.Net.dll)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多