Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 试图读取或写入受保护的内存_C# 4.0_Nunit_Asp.net Mvc 3_Rhino_Mvccontrib Testhelper - Fatal编程技术网

C# 4.0 试图读取或写入受保护的内存

C# 4.0 试图读取或写入受保护的内存,c#-4.0,nunit,asp.net-mvc-3,rhino,mvccontrib-testhelper,C# 4.0,Nunit,Asp.net Mvc 3,Rhino,Mvccontrib Testhelper,我有一个ASP.NET MVC 3 web应用程序示例,它是在Jonathan McCracken的试驾ASP.NET MVC大书之后开发的,顺便说一句,我偶然发现了一个问题。注意,我使用的是MVCContrib、Rhino和NUnit [Test] public void ShouldSetLoggedInUserToViewBag() { var todoController = new TodoController(); var builde

我有一个ASP.NET MVC 3 web应用程序示例,它是在Jonathan McCracken的试驾ASP.NET MVC大书之后开发的,顺便说一句,我偶然发现了一个问题。注意,我使用的是MVCContrib、Rhino和NUnit

    [Test]
    public void ShouldSetLoggedInUserToViewBag() {
        var todoController = new TodoController();
        var builder = new TestControllerBuilder();
        builder.InitializeController(todoController);

        builder.HttpContext.User = new GenericPrincipal(new GenericIdentity("John Doe"), null);

        Assert.That(todoController.Index().AssertViewRendered().ViewData["UserName"], Is.EqualTo("John Doe"));
    }
上面的代码总是抛出此错误:

System.AccessViolationException:尝试读取或写入受保护内存。这通常表示其他内存已损坏

控制器操作代码如下所示:

[HttpGet]
    public ActionResult Index() {
        ViewData.Model = Todo.ThingsToBeDone;
        ViewBag.UserName = HttpContext.User.Identity.Name;

        return View();
    }
据我所知,由于控制器操作中的两个赋值,应用程序似乎崩溃了。然而,我看不出怎么会有错

有人能帮我找出这个问题的解决办法吗

多谢各位

编辑1

我做了一些实验来看看问题出在哪里。 删除ViewData时,模型分配问题超出了预期结果中的ViewResult类型。它实际上是ViewResult类型。。ViewData分配非常基本,我不认为这是问题所在,因此我认为Rhino或MVCcontrib与MVC 3结合使用都有问题

我之前还为同一控制器操作编写了以下测试:

        [Test]
    public void ShouldDisplayAListOfTodoItems() {
        Assert.That(((ViewResult)new TodoController().Index()).ViewData.Model, Is.EqualTo(Todo.ThingsToBeDone));
    }
[HttpGet]
public ActionResult Index() 
{
    ViewBag.UserName = HttpContext.User.Identity.Name;
    return View(Todo.ThingsToBeDone);
}
此测试现在失败,System.NullReferenceException:对象引用未设置为对象的实例,可能是因为没有为此特定测试设置HttpContext。删除ViewBag指定时,一切正常

希望这能让问题更清楚

编辑2

删除ViewData.Model分配后调试代码时,会引发另一个错误:System.NullReferenceException:对象引用未设置为对象的实例。在ViewBag分配上。

这个怎么样:

[Test]
public void ShouldSetLoggedInUserToViewBag() 
{
    // arrange
    var todoController = new TodoController();
    var builder = new TestControllerBuilder();
    builder.InitializeController(todoController);

    builder.HttpContext
        .Stub(x => x.User)
        .Return(new GenericPrincipal(new GenericIdentity("John Doe"), null));

    // act
    var actual = todoController.Index();

    // assert
    actual.AssertViewRendered();
    Assert.That(todoController.ViewData["UserName"], Is.EqualTo("John Doe"));
}
以及控制器动作:

        [Test]
    public void ShouldDisplayAListOfTodoItems() {
        Assert.That(((ViewResult)new TodoController().Index()).ViewData.Model, Is.EqualTo(Todo.ThingsToBeDone));
    }
[HttpGet]
public ActionResult Index() 
{
    ViewBag.UserName = HttpContext.User.Identity.Name;
    return View(Todo.ThingsToBeDone);
}
备注:我会将信息包括在视图模型中,并避免使用ViewData/ViewBag。它不是强类型的,它会强制您使用魔引号。

这样如何:

[Test]
public void ShouldSetLoggedInUserToViewBag() 
{
    // arrange
    var todoController = new TodoController();
    var builder = new TestControllerBuilder();
    builder.InitializeController(todoController);

    builder.HttpContext
        .Stub(x => x.User)
        .Return(new GenericPrincipal(new GenericIdentity("John Doe"), null));

    // act
    var actual = todoController.Index();

    // assert
    actual.AssertViewRendered();
    Assert.That(todoController.ViewData["UserName"], Is.EqualTo("John Doe"));
}
以及控制器动作:

        [Test]
    public void ShouldDisplayAListOfTodoItems() {
        Assert.That(((ViewResult)new TodoController().Index()).ViewData.Model, Is.EqualTo(Todo.ThingsToBeDone));
    }
[HttpGet]
public ActionResult Index() 
{
    ViewBag.UserName = HttpContext.User.Identity.Name;
    return View(Todo.ThingsToBeDone);
}

备注:我会将信息包括在视图模型中,并避免使用ViewData/ViewBag。它不是强类型的,它会强制你使用神奇的引号。

好吧,我已经把这个打倒了。正如我所怀疑的,这是因为MVCContrib。请注意,我使用的是MVC3beta,MVCContrib尚未正式支持它。考虑到这一点,我下载了MVC 3分支的最新MVCContrib源代码

转到,切换到mvc3分支,下载并使用附加的bat构建二进制文件。然后,将所需文件包含到解决方案中


嗯,这可能会在未来的稳定版本中得到修复,但我想它可能对其他人有用。谢谢达林的关注。

好吧,我已经把这个打倒了。正如我所怀疑的,这是因为MVCContrib。请注意,我使用的是MVC3beta,MVCContrib尚未正式支持它。考虑到这一点,我下载了MVC 3分支的最新MVCContrib源代码

转到,切换到mvc3分支,下载并使用附加的bat构建二进制文件。然后,将所需文件包含到解决方案中


嗯,这可能会在未来的稳定版本中得到修复,但我想它可能对其他人有用。感谢Darin的关注。

异常到底是在哪一行引发的,您可以发布完整的堆栈跟踪吗?当我尝试将某些内容分配到ViewData中时,它会消失。因此,如果我对两行进行注释,在这两行中我将内容分配给ViewData和ViewBag,那么它不会消失。在哪一行上引发了异常,您可以发布完整的堆栈跟踪吗?嗯,当我尝试将某些内容分配给ViewData时,它会消失。因此,如果我对我将内容分配给ViewData和ViewBag的两行进行注释,它不会消失。我会尽快尝试您的代码,并在结果上与您联系。ViewBag是动态的,不需要引用。这是MVC3的新添加。不,不起作用。它抛出一个错误,表示:您正在尝试对定义为使用PropertyBehavior的属性设置期望。而不是编写这样的代码:mockObject.Stubx=>x.SomeProperty.Return42;您可以直接使用该属性来获得相同的结果:mockObject.SomeProperty=42@干涉仪,对,所以我错了。如果您像在示例中那样直接分配它会怎么样。如果在控制器操作中不再使用ViewBag/ViewData,又该怎么办。你能试着隔离这个问题吗?看我的编辑。我认为MVCContrib没有正确设置HttpContext。我将尽快尝试您的代码,并在结果上与您联系。ViewBag是动态的,不需要引用。这是MVC3的新添加。不,不起作用。它抛出一个错误,表示:您正在尝试对定义为使用PropertyBehavior的属性设置期望。而不是编写这样的代码:mockObject.Stubx=>x.SomeProperty.Return42;您可以直接使用该属性来实现相同的结果:mockObject.SomeProperty=
42;@干涉仪,对,所以我错了。如果您像在示例中那样直接分配它会怎么样。如果在控制器操作中不再使用ViewBag/ViewData,又该怎么办。你能试着隔离这个问题吗?看我的编辑。我认为MVCContrib没有正确设置HttpContext.LIFE SAVER period。。。谢谢。救生期。。。谢谢