《Pro ASP.NET MVC 4》异常整理

最近在和同学一起研究毕业设计,准备模仿《Pro ASP.NET MVC 4》里面的SportsStore设计模式和测试驱动开发.

由于和书中VS版本不同,发现不少问题,在此总结.

用户代码未处理 System.InvalidOperationException  (msdn: 当方法调用对于对象的当前状态无效时引发的异常。)
HResult=-2146233079
Message=未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。
Source=EntityFramework

  

解决方法:

添加引用:项目文件夹packagesEntityFramework.6.1.3lib et40EntityFramework.SqlServer.dll

System.Reflection.TargetInvocationException (由通过反射调用的方法引发的异常。)

当时是在DbContext的实现类初始化时报错

private EFDbContext context = new EFDbContext();

  

解决方法:添加同一个引用,添加的引用版本不同,可能会出现此异常

packagesEntityFramework.6.1.3lib et40EntityFramework.SqlServer.dll
packagesEntityFramework.6.1.3lib et40EntityFramework.dll

单元测试异常:

Mock<IProductRepository> mock = new Mock<IProductRepository>();
mock.Setup(m => m.Products).Returns(new Product[] {
new Product { ProductID=1,Name="P1"},
new Product {ProductID=2,Name="P2" },
new Product {ProductID=3,Name="P3" },
new Product { ProductID=4,Name="P4"},
new Product {ProductID=5,Name="P5" }
}.AsQueryable());

ProductController controller = new ProductController(mock.Object);
controller.PageSize = 3;

IEnumerable<Product> result = (IEnumerable<Product>)controller.List(2).Model; 
测试名称:	Can_Paginate
测试全名:	SportsStore.UnitTests.UnitTest1.Can_Paginate
测试源:	C:UsersainscDesktopSportsStoreSportsStore.UnitTestsUnitTest1.cs:第 16 行
测试结果:	未通过
测试持续时间: 	0:00:00.688407

结果 的堆栈跟踪:	
在 System.Web.Mvc.BuildManagerViewEngine..ctor(IViewPageActivator viewPageActivator, IResolver`1 activatorResolver, IDependencyResolver dependencyResolver, VirtualPathProvider pathProvider)
   在 System.Web.Mvc.WebFormViewEngine..ctor(IViewPageActivator viewPageActivator)
   在 System.Web.Mvc.WebFormViewEngine..ctor()
   在 System.Web.Mvc.ViewEngines..cctor()
 --- 内部异常堆栈跟踪的末尾 ---
    在 System.Web.Mvc.ViewEngines.get_Engines()
   在 System.Web.Mvc.Controller.View(String viewName, String masterName, Object model)
   在 System.Web.Mvc.Controller.View(Object model)
   在 SportsStore.WebUI.Controllers.ProductController.List(Int32 page) 位置 C:UsersainscDesktopSportsStoreSportsStore.WebUIControllersProductController.cs:行号 29
   在 SportsStore.UnitTests.UnitTest1.Can_Paginate() 位置 C:UsersainscDesktopSportsStoreSportsStore.UnitTestsUnitTest1.cs:行号 35
结果 的消息:	
测试方法 SportsStore.UnitTests.UnitTest1.Can_Paginate 引发了异常: 
System.TypeInitializationException: “System.Web.Mvc.ViewEngines”的类型初始值设定项引发异常。 ---> System.IO.FileNotFoundException: 未能加载文件或程序集“System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLMSoftwareMicrosoftFusion!EnableLog]。

解决方法:

添加引用,程序集 System.Web.WebPages

原文地址:https://www.cnblogs.com/sunyl/p/5469492.html