在Razor视图中的foreach循环中,程序集未引用编译错误

时间:2015-04-11 07:19:05

标签: c# asp.net-mvc razor collections iis-express

编辑:我已经检查并尝试了很多SE上发现的其他Assembly Not Referenced问题,但是我没有找到很多处理应该是内置程序集(System.Collections.Generic.List<t>)的问题。这使得手动添加或删除引用等变得困难。

我正在尝试从API响应构建PartialView。我已经确认响应正确且格式正确,我的对象正在构建正确,但是当我生成部分视图时,会显示编译错误。

Compiler Error Message: CS0012: The type 'System.Collections.Generic.List`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

这是Razor视图:

@using OpsComponent
@model OpsComponent.ComponentData

<div class="row">
    <div class="col-md-6">
        <ul class="list-group">
            @foreach (Data metric in Model.Metrics)
            {
                <li class="list-group-item">
                    <span class="badge">@metric.Value</span>
                    @metric.Key<br/>
                </li>
            }

        </ul>
    </div>
</div>

这是Data类的定义:

public class Data
    {
        public string Key { get; set; }
        public string Value { get; set; }
        public string Source { get; set; }
        public Status Status { get; set; }

    }

Status是枚举。我已经在Debugging中检查了Model对象在传递给PartialView之前是否正确且格式正确,但是我得到了Server Error屏幕和500响应。

在第@foreach (Data metric in Model.Metrics)

完整性的操作代码:

public ActionResult ComponentDetail(string id)
        {
            var data = Client.GetComponentData(id.DecodeBase64ToString());
            var partialViewResult = PartialView("_ComponentDetail", data);
            return partialViewResult;
        }

3 个答案:

答案 0 :(得分:39)

我已经弄明白了,而且它非常简单。我仍然不知道为什么这是必要的,但向assembly添加新的web.config标记似乎已经解决了这个问题。我添加的标记位于<compilation>标记下,如下所示:

<assemblies>
    <add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

简单,但已解决错误,现在视图正确呈现。

答案 1 :(得分:2)

我最近遇到了同样的问题,最好在这里描述:https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0012

问题来自 PartialView.cshtml 和 MainView.cshtml 中的两个不同引用,每个引用都引用 Razor 页面中的两个不同类;两个视图中的交集都是一个 foreach 循环。

解决方案是再添加一行:

<add assembly="NameOfTheProject.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

到 Web.config 中 Views 文件夹下已经存在的程序集信息。

答案 2 :(得分:0)

这是因为在Razor引擎中如何添加引用。 已报告https://github.com/Antaris/RazorEngine/issues/415该问题。