You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中iCal.Net组件加载失败:如何定位并加载.dll文件

问题

使用PowerShell结合iCal.Net包读取.ics文件时,执行以下操作后创建Calendar对象报错:

# 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文件。

解决方案

1. 定位iCal.Net及依赖的.dll文件

Install-Package默认将包安装到当前用户的NuGet目录,可通过以下命令自动查找最新版本的.dll:

# 查找最新版Ical.Net.dll
$icalDll = Get-ChildItem -Path "$env:USERPROFILE\.nuget\packages\ical.net" -Recurse -Filter "Ical.Net.dll" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName

# 查找最新版NodaTime.dll(iCal.Net的依赖)
$nodaTimeDll = Get-ChildItem -Path "$env:USERPROFILE\.nuget\packages\nodatime" -Recurse -Filter "NodaTime.dll" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName

2. 加载程序集

找到路径后用Add-Type加载:

Add-Type -Path $nodaTimeDll
Add-Type -Path $icalDll

3. 完整修正后的脚本

# 安装依赖包
Install-Package NodaTime -Force
Install-Package iCal.Net -Force

# 查找并加载程序集
$icalDll = Get-ChildItem -Path "$env:USERPROFILE\.nuget\packages\ical.net" -Recurse -Filter "Ical.Net.dll" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName
$nodaTimeDll = Get-ChildItem -Path "$env:USERPROFILE\.nuget\packages\nodatime" -Recurse -Filter "NodaTime.dll" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName
Add-Type -Path $nodaTimeDll
Add-Type -Path $icalDll

# 下载ICS文件
$icsfile = "C:\Users\Windows\Desktop\ical\caalendar.ical"
$icsurl = "https://url_to_download/basic.ics"
Invoke-WebRequest $icsurl -OutFile $icsfile

# 读取并解析ICS文件(使用iCal.Net提供的静态方法更便捷)
$calendar = [Ical.Net.Calendar]::LoadFromFile($icsfile)

补充说明

  • LoadFromFile是iCal.Net官方提供的静态方法,直接从文件加载解析日历,比手动创建Calendar对象更高效。
  • 手动加载NodaTime.dll可避免PowerShell自动加载依赖时可能出现的版本不匹配问题。

内容的提问来源于stack exchange,提问作者aristosv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:09:29