【发布时间】:2014-12-15 18:31:57
【问题描述】:
我们目前正在使用 Razor 视图引擎来呈现 HTML(在 ASP.NET MVC 项目之外)。直到今天,当我将枚举类型添加到驻留在另一个程序集中的模型中时,一切都运行良好。现在当我编译时,我收到以下错误:
“RazorEngine.Templating.TemplateCompilationException 未处理
HResult=-2146233088 消息=无法编译模板。方式 'ClassLibrary1.MyClass.MyEnum' 是在不是 参考。您必须添加对程序集 'ClassLibrary1, 版本=1.0.0.0,文化=中性,PublicKeyToken=null'。"
我能够在一个从外部 DLL 引用类型的简单控制台应用程序中重现此错误:
模板:
@model RazorExample.MyModel
<div>
@if(Model.EnumValue == ExternalLib.MyEnum.Val1) { <p>My value is 1</p> }
</div>
枚举(在 ExternalLib 中定义):
namespace ExternalLib
{
public enum MyEnum
{
Val1 = 1,
Val2 = 2
}
}
型号:
using ExternalLib;
namespace RazorExample
{
public class MyModel
{
public String Name { get; set; }
public MyEnum EnumValue{ get; set; }
}
}
编译模板的代码:
Razor.Compile(template.ToString(), "MyTemplate");
我也尝试过添加“@using ExtneralLib;”到模板,但这会导致无法找到类型“ExternalLib”的错误。我看过一两个关于类似事情的其他帖子(Razor-based view doesn't see referenced assemblies),但这不是在 Web 应用程序的上下文中。任何帮助表示赞赏。
编辑
我说得太早了,这解决了我昨天的错误。它修复了我在测试应用程序中的错误,但是当我去更新我的代码时,它不起作用。再看多一点后,我意识到我的模型有点复杂。
我已经相应地更新了我的示例应用程序:
型号:
public class MyModel
{
public String Name { get; set; }
public ParentClass ParentClass { get; set; }
}
父类:
namespace ExternalLib
{
public class ParentClass
{
public string Name { get; set; }
public ChildClass ChildClass { get; set; }
}
}
子类:
namespace ExternalLib
{
public class ChildClass
{
public enum MyEnum
{
Val1 = 1,
Val2 = 2
}
}
}
型号:
@model RazorExample.MyModel
<div>
@if(Model.ParentClass.ChildClass.EnumValue == ExternalLib.ChildClass.MyEnum.Val1) { <p>My value is 1</p> }
</div>
使用此代码,如果我添加 @using ExternalLib;声明到模型中,我收到错误“无法编译模板。找不到类型或命名空间名称'ExternalLib'(您是否缺少 using 指令或程序集引用?)”
如果我不使用 @using 语句,我会收到异常“无法编译模板。'ExternalLib.ParentClass' 类型是在未引用的程序集中定义的。您必须添加对程序集“ExternalLib,版本”的引用=1.0.0.0,Culture=neutral,PublicKeyToken=null'。"
修复(或至少解决方法)
通过为子类创建单独的模型和模板并在模板中使用@Include 语句将其导入,我能够在我试图开始工作的代码中解决此问题。如果有人感兴趣,我可以发布该代码但是我担心我的帖子已经有点长了。
【问题讨论】:
-
明显的问题:您是否真的在解决方案资源管理器中右键单击您的项目并
Add Reference...到 ClassLibrary1? -
与@Eris 相同的问题...此外,您仍需要在视图顶部提供
using参考 -
我确实添加了参考。此外,我尝试添加 @using 语句,但没有运气。 Rich 在下面的回答(#1)解决了我的问题。谢谢。
标签: c# .net asp.net-mvc razor