首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新对象:使用"0“参数调用".ctor”的异常:“MimeKit.ParserOptions‘的类型初始化程序抛出一个异常。”

新对象:使用"0“参数调用".ctor”的异常:“MimeKit.ParserOptions‘的类型初始化程序抛出一个异常。”
EN

Stack Overflow用户
提问于 2022-06-14 20:50:04
回答 1查看 453关注 0票数 0

背景:

尝试在Win10上使用Powershell发送电子邮件,并希望使用端口587和TLS 1.2与SMTP服务器通信。

尝试使用Nuget图库包:MailKit及其依赖项MimeKit,因为考虑到安全性问题,微软不推荐System.Net.Mail.SmtpClient。

使用Powershell安装MailKit (这似乎有效),然后对MimeKit也一样,但是MimeKit包安装失败(正如您可以看到的那样,异常字符串对于依赖项循环的确切性质没有特别的帮助):

代码语言:javascript
复制
PS C:\bin\ps1\renew_certs> Install-Package -Name 'MimeKit' -Source "https://www.nuget.org/api/v2" -Force
Install-Package : Dependency loop detected for package 'MimeKit'.
At line:1 char:1
+ Install-Package -Name 'MimeKit' -Source "https://www.nuget.org/api/v2 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : Deadlock detected: (MimeKit:String) [Install-Package], Exception
+ FullyQualifiedErrorId : 
DependencyLoopDetected,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
PS C:\bin\ps1\renew_certs> ($error[0].Exception.GetBaseException())
Dependency loop detected for package 'MimeKit'.

这里关于依赖循环异常的另一个答案是建议在installation上使用-SkipDependency参数,这避免了安装异常。

我继续尝试运行我的代码,但是这导致了一个异常(非常类似于这个问题所涉及的异常),在这种情况下

代码语言:javascript
复制
PS C:\bin\ps1\renew_certs> ($error[0].Exception.GetBaseException())

结果字符串指示无法加载的文件或程序集是包Portable.BouncyCastle,它被标识为MimeKit的依赖项。

因此,我为Portable.BouncyCastle使用了Install(我没有使用-SkipDependencies,所以我假设它们已经安装了),然后在代码中也使用了Add来加载DLL。

这似乎可以防止与BouncyCastle相关的异常;但是,现在运行代码会产生异常,这是我问题的主题:

代码:

代码语言:javascript
复制
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\System.Text.Encoding.CodePages.6.0.0\lib\netstandard2.0\System.Text.Encoding.CodePages.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\Portable.BouncyCastle.1.9.0\lib\netstandard2.0\BouncyCastle.Crypto.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.3.3.0\lib\netstandard2.0\MimeKit.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MailKit.3.3.0\lib\netstandard2.0\MailKit.dll"

 
$SMTP     = New-Object MailKit.Net.Smtp.SmtpClient
$Message  = New-Object MimeKit.MimeMessage

<#
$TextPart = [MimeKit.TextPart]::new("plain")
$TextPart.Text = "There was a deployment"
<#

例外:

代码语言:javascript
复制
PS C:\bin\ps1\renew_certs> . "c:\bin\ps1\renew_certs\send_email.ps1"
New-Object : Exception calling ".ctor" with "0" argument(s): "The type initializer for 'MimeKit.ParserOptions' threw an exception."
At C:\bin\ps1\renew_certs\send_email.ps1:9 char:13
+ $Message  = New-Object MimeKit.MimeMessage
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
 
PS C:\bin\ps1\renew_certs> ($error[0].Exception.GetBaseException())
Could not load file or assembly 'System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its 
dependencies. The system cannot find the file specified.
PS C:\bin\ps1\renew_certs>

System.Text.Encoding.CodePages被列为MimeKit的依赖项,因此我试图解决类似于BouncyCastle的情况,但是System.Text.Encoding.CodePages安装也会失败。因此,我确实安装了-SkipDependencies标志,并在代码中显式地添加了add;但是,仍然是相同的例外。

MimeKit中,System.Text.Encoding.CodePages的依赖项表示(>= 4.5.1),安装的依赖项是SystemT.ext.Encoding.CodePages.6.0.0目录。异常错误字符串表示无法加载的文件或程序集是Version=4.1.1.0,但在库中没有看到任何4.1.*版本。

想知道这是否是System.Text.Encoding.CodePages的依赖,然后我试着安装System.Memory包,但它也失败了依赖循环错误,看看它的依赖项,我不知所措。

是否有任何方法可以确切地了解依赖循环错误发生的原因,或者哪些文件实际上丢失了?

这个问题可能完全是别的问题吗?

异常字符串表示“系统找不到指定的文件”。到底有没有看到没有找到的文件呢?

当我在VS代码中运行Powershell调试器时,会抛出异常,进入MimeKit.TextPart::new(“平原”)。要调试到DLL中吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-04 01:58:15

您需要精确的System.Text.Encoding.CodePages v4.5.1 (6.0.0坏兼容性)。

您可能仍然有错误,因为您使用了-SkipDependencies,因此谁知道您仍然缺少什么。

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

https://stackoverflow.com/questions/72623209

复制
相关文章

相似问题

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