【问题标题】:Assembly Not Referenced compilation error in foreach loop in Razor viewRazor 视图中 foreach 循环中的 Assembly Not Referenced 编译错误
【发布时间】:2015-06-16 23:40:09
【问题描述】:

编辑:我已经检查并尝试了很多其他在 SE 上发现的未引用的程序集问题,但我没有发现很多处理应该是内置程序集的问题 (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 是一个枚举。我在调试中检查了模型对象在传递给 PartialView 之前是正确且格式正确的,但我得到的不是正确的布局,而是服务器错误屏幕和 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;
        }

【问题讨论】:

  • @Bjørn-RogerKringsjå 我添加了一个编辑解释,但我认为与许多其他“未引用”SE 问题相比,这里的挑战在于它们主要处理 a) ReSharper“无法解析符号”错误(不使用 R#),或 b) 用户库,而不是内置类型列表 List
  • 您是否尝试添加@using System.Collections.Generic

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


【解决方案1】:

我最近遇到了同样的问题,最好在这里描述: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"/>

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我已经弄明白了,而且非常简单。我仍然不知道为什么这是必要的,但是向web.config 添加一个新的assembly 标签似乎已经解决了这个问题。我添加的标签在&lt;compilation&gt;标签下,如下:

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

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

      【讨论】:

      • 为我工作。谢谢!
      • 请注意,您需要用&lt;compilation&gt; 包围&lt;assemblies&gt; 注释。像这样:&lt;compilation debug="true" targetFramework="4.0"&gt; &lt;assemblies&gt; &lt;add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /&gt; &lt;/assemblies&gt; `
      • &lt;add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/&gt; 在我的情况下
      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多