(把Onenote中的笔记搬上来)
在解决方案中建立了两个Web项目(未相互依赖)
Lc.Web(设为启动项目)
Lc.Frontend
其中Lc.Web设为启动项目。
在F5启动执行的状态下两个项目均会启动,访问未设为启动项目Lc.Frontend的项目时会报以下错误:
1、未能加载文件或程序集“System.Net.Http.Formatting”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自 HRESULT:0x80131040)
反过来,设Lc.Frontend为启动项目时,访问Lc.Web,会报以下错误:
2、未能加载文件或程序集“System.Web.Http”或它的某一个依赖项
原因:
根据之前 RabbitMQ.Client 的 未能加载文件或程序集 的问题处理方案分析,原因应该是两个项目依赖或兼容的程序集版本不一造成的。
结果:
问题1
原因是 在Lc.Frontend项目中依赖程序集 Newtonsoft.Json 绑定的最新版本为6.0.0.0
web.config中
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 这里问题,当同还有引用程序集文问题
</dependentAssembly>
而在Lc.Web 中 最新版本为 8.0.0.0,
因此当以 Lc.Web为启动项目时,Asp.net 临时生成文件以Lc.Web 为主,
而所有启动项目会从临时生成文件夹(..\Temporary ASP.NET Files)中获取程序集,
因此版本低的Lc.Frontend会报错。
问题2
原因是 Lc.Web项目中包含了Asp.net Web Api 的程序集,因此会包含 System.Web.Http,
但是Lc.Frontend 项目未包含Asp.net Web Api 的程序集,因此不包含 System.Web.http,
当以 Lc.Frontend 项目为启动项时,临时生成文件以该项目程序集生成,缺少了 System.Web.http。
因此访问 Lc.Web 时会报 未加截System.Web.Http错误。
解决方案:
A:
更改Lc.Frontend 项目 依赖Newtonsoft.Json 绑定的最新版本(通过程序包管理更新 Newtonsoft.Json程序集为8.0.0.0)与 Lc.Web 相同
仅以 Lc.Web 为启动项目,启动时两个项目均可访问。
问题解决完成。
B:
更改Lc.Frontend 项目 依赖Newtonsoft.Json 绑定的最新版本与 Lc.Web 相同
相互设置项目生成依赖(设置Lc.Frontend的项目生成顺序中勾上Lc.Web),则任何一个项目设为启动时,两个项目均可访问。
问题解决完成。
附:Temporary ASP.NETFiles 文件夹中保存的是什么内容 http://blog.youkuaiyun.com/kirawoo/article/details/41038403