c# - 由于绑定重定向,无法加载 DLL
问题描述
我有一个使用 SendGrid Nuget 包的 DLL 项目。SendGrid 包需要 Nuget 包 System.Net.Http 4.3.4。然后我将这个 DLL 项目打包到一个 Nuget 包中。
现在,我有一个包含我的 Nuget 包的 ASP.NET MVC 项目。由于依赖项要求,安装它会安装 SendGrid、System.Net.Http 和其他依赖项。
现在,当我让我的网络应用程序尝试发送电子邮件时,我收到了以下错误。
System.IO.FileNotFoundException
HResult=0x80070002
Message=Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Source=Bc3.Mail
StackTrace:
at Bc3.Mail.MailHelper.SendMessage(SendGridMessage message) in C:\Code\Shared Libraries\Bc3.Mail\Bc3.Mail\MailHelper.cs:line 166
at Bc3.Mail.MailHelper.SendMail(MailMessage mail) in C:\Code\Shared Libraries\Bc3.Mail\Bc3.Mail\MailHelper.cs:line 128
…
现在,我很困惑,因为我认为安装了 4.3.4 版。我在所有项目中检查了 System.Net.Http 的版本,它说它的版本是 4.2.0.0。好的,当我以为我安装了 4.3.4 时,我很困惑为什么它显示 4.2。但是,如果我的项目中引用了 4.2,它怎么会找不到呢?
无论如何,接下来我查看了我的 web.config 文件并看到了这个
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
</dependentAssembly>
我对这些绑定重定向一无所知。但我决定删除它,一切正常。
所以我的问题是为什么?
谢谢
解决方案
关于绑定重定向
绑定重定向允许运行时选择特定程序集的替代版本。绑定重定向可能很有帮助,因为它们降低了绑定到特定版本程序集的严格性。但是,它们会带来冲突。
https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions
添加 SendGrid 后绑定重定向
我注意到添加对 SendGrid 的 NUGET 引用插入了以下绑定重定向
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
</dependentAssembly>
创建使用 SendGrid 的 NUGET 包
我创建了一个简单的类库项目,它引用了 SendGrid 并制作了一个 NUGET 包。我将这个 NUGET 包放在我的私人提要文件夹中,然后从另一个框架项目中引用了这个 NUGET 包。编译的 .CONFIG 文件具有以下绑定重定向
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
可能性
我的想法:
- 您在web.config中看到的绑定重定向可能是由对其他一些NUGET包的无意引用引起的
- 允许编译器在构建操作期间生成绑定重定向,而不是在 Web.config 或 app.config 中手动添加绑定重定向。应该检查项目设置-->应用程序选项卡-->自动生成绑定重定向。
希望这可以帮助。
推荐阅读
- c# - 如何从用户那里接收多个数据点而不每次都创建一个新变量
- resize - 后记:同时重新缩放和调整页面大小
- c++ - 无法编译 MEGA api
- google-drive-api - 更改本地 google drive 文件夹的结构
- c# - LINQ 表达式 'GroupByShaperExpression: 在 LINQ 查询中使用 GROUPBY 时无法翻译
- javascript - 检查javascript中的时差
- typescript - 如何禁用某个界面的显式输入
- bootstrap-4 - 如果我使用引导程序构建了一个站点,我还需要编写媒体查询吗?
- python - Twilio 错误 - 11200 HTTPS 检索/Python Flask 应用程序
- c# - 我不能让我的球员前进和后退!问题是什么?