【问题标题】:Could not load file or assembly 'System.Web.Mvc无法加载文件或程序集'System.Web.Mvc
【发布时间】:2012-02-12 17:11:18
【问题描述】:

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

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

System.IO.FileNotFoundException:无法加载文件或程序集“System.Web.Mvc,版本=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。

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

【问题讨论】:

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


    【解决方案1】:

    你的例外:

    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 部分中。

    【讨论】:

      【解决方案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\Your name\Desktop\System.Web.Mvc.dll

      我希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        如果有人在 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 > [Web 服务名称] > Reference.svcmap 下)并单击“配置服务引用...”,然后取消选中显示“在引用的程序集中重用类型”的复选框。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2010-09-20
            • 2013-01-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2013-05-23
            相关资源
            最近更新 更多