c# - 强制 C# 加载仅在 cshtml 文件中引用的程序集

标签 c# visual-studio-2010 razorengine

如何强制 C# 运行时加载仅在作为 Razor 模板的 .cshtml 文件中使用的程序集?

我正在使用 Newtonsoft 的 JSON 序列化功能,程序集被项目引用,但是当 Razor 引擎编译模板时,我收到一个错误,提示 Newtonsoft命名空间未知。我还看到 dll 实际上没有加载(我想这是有道理的,因为它没有在 C# 代码中的任何地方被引用)。如果我在我的 C# 代码中的某处添加了一条虚拟行,它引用了程序集中的任何函数,它就会被加载并且 Razor 很高兴。有没有办法指定应该加载程序集,即使它没有被引用?我真的不想在代码中留下虚拟行。

最佳答案

你是对的,编译器在编译/优化期间删除了项目引用,因为它检测到它并没有真正被代码使用。

通过配置告诉运行时加载程序集的官方方法是add a reference in your web.config file inside the <compilation> section

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Newtonsoft.Json" />
  </assemblies>
</compilation>

也就是说,有时 web.config 不可用,或者我想避免用越来越多的行使其膨胀,所以我个人更喜欢在代码中引用一行的 hack:(是的,一个肮脏的糟糕而愚蠢的黑客攻击,但我发现没有造成太大伤害)。

class LoadNewtonSoftHack
{
    private void DoNothing()
    {
        var o = Newtonsoft.Json.Linq.JValue.Parse("{}");
    }
}

第三种选择是在 Web 应用程序启动时强制加载程序集:(但确保您的构建复制了 bin\ 文件夹中的 .dll)。

Assembly assembly = Assembly.LoadFrom("Newtonsoft.Json.dll");

关于c# - 强制 C# 加载仅在 cshtml 文件中引用的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39334206/

相关文章:

c# - 移除对继承的抽象类引用的依赖

c# - 为什么C#不显示表格

asp.net-mvc - 命名空间问题,单个解决方案中的多个项目

asp.net-mvc-3 - 运行 IIS 5.1 的 MVC 3 无法使用 Windows 身份验证

c# - 从 html 助手中获取未编码的 html

c# - 如何在C#中声明一个类型为用户定义的实例

c# - ServiceContext.SaveChangesWithRetries 与 SaveChangesOptions.Batch 异常

javascript - 从外部清除 IE 浏览缓存

html - 如何防止 Razor 转义符号,例如 in?

c# - 为什么在 Edge 中调试我的 asp.net core 2.0 应用程序时显示 "You' ll 需要一个新的应用程序来打开此本地主机”弹出窗口?