无法加载文件或程序集'System.Web.Mvc

时间:2012-01-17 22:07:06

标签: asp.net asp.net-mvc-3 c#-4.0

我有一个不同项目的解决方案,其中一个是MVC 3项目,另一个是测试项目。

从测试项目中,我正在尝试测试我的控制器行为。但是当我正在运行测试时,系统会抛出错误告诉我:

  

System.IO.FileNotFoundException:无法加载文件或程序集'System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。系统找不到指定的文件   警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.

测试中的代码如下:

[TestMethod]
public void TestMethod()
{
    var myService = new Mock<IMyService>();
    myService.Setup(a => a.ReadAuthorizationRequest())
        .Returns<EndUserAuthorizationRequest>(null);
    int error = 0;
    var controller = new myController(myService.Object);

    try
    {
        var actionResult = controller.Authorize();
    }
    catch (HttpException exception)
    {
        error = exception.GetHttpCode();
    }
    Assert.AreEqual(403, error);
}

控制器:

public class myController: Controller
{
    private readonly IMyService _service;

    public OAuthController(IMyService service)
    {
        _service = service;
    }

    [Authorize, AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public ActionResult Authorize()
    {
        ClientApplication requestingClient;
        var request = _service.ReadAuthorizationRequest();
        if (request == null)
        {
            throw new HttpException((int) HttpStatusCode.BadRequest,
                "Missing authorization request.");
        }
     }
}

正如您所看到的,我正在尝试测试控制器行为,因此,只要服务不读取请求,控制器就应该使用httpStatusCode 403抛出httpException。

这有什么问题。先感谢您。

4 个答案:

答案 0 :(得分:12)

从你的例外:

  

System.IO.FileNotFoundException:无法加载文件或程序集'System.Web.Mvc,Version = 1.0.0.0

它正在尝试加载MVC版本1.您可能还需要在测试项目中执行程序集绑定重定向,与web.config中的相同:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

将其放在测试程序集的app.config的configuration部分。

答案 1 :(得分:2)

安装VS 2012后我遇到了同样的错误,我的解决方案中没有一个项目引用System.Web.Mvc。当我将System.Web.Mvc.dll添加到GAC时,问题已解决。

以下是我所做的步骤:

  1. 下载System.Web.Mvc 1.0 dll文件。
  2. 单击“开始”,单击“所有程序”,单击“Visual Studio”,单击“Visual Studio工具”,然后单击“Visual Studio命令提示符”。
  3. 键入以下内容:GacUtil -I {您下载System.Web.Mvc.dll的文件夹},即C:\ Users \您的名称\ Desktop \ System.Web.Mvc.dll
  4. 我希望这会有所帮助。

答案 2 :(得分:2)

如果有人在Visual Studio 2012中寻找此问题的解决方案,这个网站帮助我:

http://www.yeronimo.nl/post/2013/03/27/Error-1-Referencesvcmap-Could-not-load-file-or-assembly-xxxxxxx-etc

(另:http://www.christowles.com/2012/08/could-not-load-file-or-assembly.html

右键单击项目解决方案资源管理器中的Web服务引用(Reference.svcmap)(在App_WebReferences&gt; [Web服务名称]&gt; Reference.svcmap下),然后单击“配置服务引用...”,然后取消选中“在引用的程序集中重用类型”复选框。

单击“确定”,然后重建项目!它对我有用!

答案 3 :(得分:1)

或者您可以在测试项目中添加对正确dll版本的引用。