首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实例化“Mimekit.MimeMessage in PowerShell”的问题无法加载程序集"System.Buffers“和"System.Memory”的文件。

实例化“Mimekit.MimeMessage in PowerShell”的问题无法加载程序集"System.Buffers“和"System.Memory”的文件。
EN

Stack Overflow用户
提问于 2022-10-12 23:44:36
回答 1查看 103关注 0票数 0

我正在构建一个利用MailKit和MimeKit使用PowerShell发送电子邮件的脚本。我在我的开发机器上构建了这个脚本的可运行版本,现在我正试图让它在服务器上运行。我遇到的第一个问题是,我不能像在我的开发机器上那样使用Add。当在我希望部署脚本的服务器上使用Add时,我会得到以下错误

(这可能是我问题的根源)。作为一种解决办法,我所做的是使用[System.Reflection.Assembly]::LoadFrom($PathToDLL),它的工作方式与预期的一样。为了验证它是否有效,我使用上面的命令加载了MailKit程序集,并且能够通过执行$SMTP = New-Object MailKit.Net.Smtp.SmtpClient来实例化SMTPClient对象,但是如果我使用[System.Reflection.Assembly]::LoadFrom加载MimeKit的DLL,然后尝试通过运行New-Object MimeKit.MimeMessage来实例化对象,则会得到一个错误Exception calling ".ctor" with "0" arguments": could not load file or assembly 'System.Memory'...

接下来的步骤是尝试使用System.Memory安装NuGet,然后使用LoadFrom将程序集导入到当前会话中。导入System.Memory后,我再次尝试实例化Mimekit.MimeMessage并接收相同的错误,但它不能加载System.Memory,而是无法加载System.Buffers。我遵循相同的过程从Nuget下载System.Buffers并成功地用[System.Reflection.Assembly]::LoadFrom($PathToSystemBuffersDLL)导入它,但是我仍然收到Exception calling ".ctor" with "0" arguments": could not load file or assembly 'System.Buffers version=4.0.2.0., Culture=nuetral etc. The system could not find the file specified.

我尝试用NuGet重新安装软件包,尝试导入其他版本,包括net462、net461和任何其他版本,但都没有效果。我做了相当广泛的研究,但对于下一步该做什么,我有点拘束。我认为一些与我所经历的非常相关的事情在这里的答案中被描述了,Cannot Load Assemblies For .Net Standard library (System.Text.Json)。我使用Install-Package -source 'nuget' $PackageName安装我的软件包。值得注意的是,要安装这些软件包,我必须使用NuGet的API版本2。(https://www.nuget.org/api/v2)

在Windows 2016上生成错误的代码,而不是在Windows 10 Pro上生成错误的代码。使用PowerShell 5和.NET Framework4.8(服务器上4.8.03761,Windows10上4.8.04084 )

代码语言:javascript
复制
    #Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MailKit.3.4.1\lib\netstandard2.0\MailKit.dll" #Gives error
    #Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.3.4.1\lib\netstandard2.0\MimeKit.dll" #gives error
    [System.Reflection.Assembly]::LoadFrom("C:\Program Files\PackageManagement\NuGet\Packages\MailKit.3.4.1\lib\netstandard2.0\MailKit.dll") #success
    [System.Reflection.Assembly]::LoadFrom("C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.3.4.1\lib\netstandard2.0\MimeKit.dll") #success
    $SMTP = New-Object MailKit.Net.Smtp.SmtpClient #works after loading mailkit assembly
    $Message = New-Object MimeKit.MimeMessage #complains about System.Memory, if I run LoadFrom and add the System.Memory.dll package, will complain about System.Buffers.dll
EN

回答 1

Stack Overflow用户

发布于 2022-10-19 20:08:38

其他可能会遇到这个问题的人。我已经通过切换到PowerShell 7来解决这个问题。我可以用Add Type -Path $DLLPath成功地加载DLL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74049052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档