首先,我要解释一下为什么我有两个问题。此问题与MimeKit的v3.3.0有关,而当我将MimeKit更新为v3.4.0时,则会出现另一个问题。
当我遇到关于v3.4.0的问题时,我回滚到v3.3.0以使它进入我的测试环境,但现在出现了另一个问题。
应用程序是运行在IIS上的服务库。
我的Dev环境正在运行Win 10,Visual 2022使用x64使用C#。
我的测试环境是Windows 2019,运行IIS10.0 (17763.1)。
当我使用MimeKit 3.3.0创建一个新的MimeMessage时,MimeMessage result = new MimeMessage();会抛出一个异常:
'MimeKit.ParserOptions‘的类型初始化程序引发了一个异常。使用进一步的InnerException:“MimeKit.Utils.CharsetUtils”的类型初始化程序抛出一个异常。
我试过的是:
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);。效果:NONESystem.Text.Encoding.CodePages为v6.0.0: it .创建了一个Windows窗体应用程序,并将其放在与相同的文件夹中,因此我知道它使用的是相同的DLL。这很好,并发送电子邮件。
我没有想法,我开始认为服务库可能有问题,尽管它在我的Dev Env中运行得很好;不过,启动WcfSvcHost而不是在那里使用IIS的是Visual,所以这个问题可能与权限有关,但我不知道服务库中的其他所有内容都在运行--甚至其他DLL也在工作。
编辑1:
首先,我确实将MimeKit和MailKit更新为v3.4.0
Dev Env一切照常运行,没有错误和邮件只是通过,就像它应该做的那样。
测试环境对于Service,一切都会一直持续到我创建MimeMessage为止,但是自从MailKit 3.3.0和MimeKit 3.4.0之后,测试env中的错误就会出现。已经发生了变化,现在问题在于以下例外:
'PerTypeValues`1‘1’的类型初始化程序抛出了一个异常。内部消息:无法加载文件或程序集“System.Runtime.CompilerServices.Unsafe、Version=4.0.4.1、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。所定位的程序集的清单定义与程序集引用不匹配。(HRESULT例外: 0x80131040)
我已经检查了System.Runtime.CompilerServices.Unsafe上的版本,它是6.0.0,所以我不明白为什么要修改到4.0.4.1。至于我的Windows窗体测试应用程序,每件事都在开发中运行。环境。没有错误,邮件只是通过。
关于Windows窗体测试应用程序和服务库本身,我把这两个应用放在同一个文件夹中,这意味着两个应用程序在同一台机器上使用相同的DLL来运行两个不同的应用程序,我想的是Win Forms应用程序中的一些代码在应用程序是服务库时没有运行,据我所见,Win表单应用程序使用的主要区别是Win表单应用程序使用System.Windows.Forms,服务库使用System.ServiceModel。如果在使用System.ServiceModel时忽略了这一点,还会有#吗?
根据MimeKit上的包依赖项(MimeKit),.NET 2.0和.NET 2.1需要System.Text.Encoding.CodePages >= 6.0.0,但显然.NETFramework 4.x并不需要,这就是我将两者都更新到3.4.0的原因。但是我现在要问,这个列表是不是错了,因为你现在告诉我,.NETFramework需要System.Text.Encoding.CodePages = 4.5.1
这就是那个测试,现在的目标是删除MimeKit和MailKit使用的所有MimeKit包,并再次回滚所有的东西,这次,我将更加努力地处理它,删除所有的NuGet包并重新开始,希望我的代码不会中断。
稍后会写回去,给出试运行的结果。
向弗兰克问好
编辑2:
嗯,移除所有的NuGet包并不有趣,但最后我做到了,然后再次安装了所有所需的包,现在MimeKit是3.3.0,MailKit是3.3.0,系统。Text.Encoding.CodePages为4.5.1
现在是Dev Env不是逃跑。
下面来自VS的信息对我一点帮助都没有。
There was a conflict between
"System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and
"System.Text.Encoding.CodePages, Version=4.5.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
"System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and
"System.Text.Encoding.CodePages, Version=4.5.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
References which depend on "System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
[***\Development\Visual Studio\ac\AppSQL\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll].
***\Development\Visual Studio\ac\AppSQL\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll
Project file item includes which caused reference "***\Development\Visual Studio\ac\AppSQL\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll".
System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
References which depend on "System.Text.Encoding.CodePages, Version=4.5.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [].
***\Development\Visual Studio\ac\AppSQL\packages\MimeKit.3.3.0\lib\net48\MimeKit.dll
Project file item includes which caused reference "***\Development\Visual Studio\ac\AppSQL\packages\MimeKit.3.3.0\lib\net48\MimeKit.dll".
MimeKit, Version=3.3.0.0, Culture=neutral, PublicKeyToken=bede1c8a46c66814, processorArchitecture=MSIL
MailKit, Version=3.3.0.0, Culture=neutral, PublicKeyToken=4e064fe7c44a8f1b, processorArchitecture=MSIL acAppSQLServerLibrary 当我查看引用的DLL文件时,除了一个版本4.6.2 (该版本号是在DLL文件本身中找到)之外,我找不到任何其他文件,而且我看不到在我的代码中没有提到4.1.1.0的任何地方,并且在我所包含的任何文件中都找不到作为文本的文本。C#是从哪里获得4.1.1.0版本的,据我在NuGet版本中所看到的,4.1.1.0版本从未存在过,它从4.0.1跳到了version #。到4.3.0,两者之间没有任何东西。
消息的详细内容如下:它告诉我文件:*\\开发\Visual Studio\ac\AppSQL\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll正在引用"System.Text.Encoding.CodePages、Version=4.1.1.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a“,但是当我查看该文件时,我只看到4.5.1.0引用,但4.1.1.0没有引用,而DLL文件版本仍然是4.6.2。
对我来说,这是没有意义的,一个名为"packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll“的文件夹中的文件怎么能用一个从未存在过的版本引用自己,难道我在这里遗漏了什么吗?
亲切问候弗兰克
编辑3:
我看到我忘记提到我正在使用.NETFramework 4.8forServiceLibrary和Windows。还有什么其他的版本我忘了提吗?
亲切问候弗兰克
发布于 2022-09-04 01:52:09
检查System.Text.Encoding.CodePages是v6.0.0:是的。
这就是问题所在-)
您需要4.5.1版本
https://stackoverflow.com/questions/73568209
复制相似问题