Ошибка сборки в сборке Not Referated в цикле foreach в режиме Razor
РЕДАКТИРОВАТЬ: Я проверил и попытался много других проблем, связанных с сбоями, которые были обнаружены на SE, но я не нашел много вопросов о том, что должно быть встроенной сборкой (System.Collections.Generic.List<t>
). Это затрудняет возможность вручную добавлять или удалять ссылку и т.д.
Я пытаюсь создать PartialView из ответа API. Я подтвердил, что ответ правильный и хорошо сформированный, мои объекты строятся правильно, но когда я создаю Partial View, вместо этого отображается ошибка компиляции.
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>
И вот определение класса данных:
public class Data
{
public string Key { get; set; }
public string Value { get; set; }
public string Source { get; set; }
public Status Status { get; set; }
}
Где Status - это перечисление. Я проверил в Отладке, что объект Model является правильным и хорошо сформированным, прежде чем он будет передан 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;
}
Ответы
Ответ 1
Я понял это, и это было чертовски просто. Я до сих пор не знаю, почему это необходимо, но добавление нового тега assembly
в web.config
, похоже, решило эту проблему. Добавленный тег находился под тегом <compilation>
и следующим образом:
<assemblies>
<add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
Простой, но разрешил ошибку, и представление теперь корректно отображается.
Ответ 2
Это из-за того, как ссылки добавляются в Razor Engine. Об этой проблеме сообщается https://github.com/Antaris/RazorEngine/issues/415.