C# 在MVC视图中引用内部类

C# 在MVC视图中引用内部类,c#,internals,C#,Internals,如果我从MVC视图中引用一个internal类,则AssemblyBuilder会在此处抱怨它无法访问该类(这很有意义): 我已尝试将InternalsVisibleTo属性添加到: 系统 System.Web System.Core 但我不能让它工作。这有可能吗 演示: internal static class InternalClass { public static string Foo = "bar"; } <%@ Page Language="C#" Inheri

如果我从MVC视图中引用一个
internal
类,则
AssemblyBuilder
会在此处抱怨它无法访问该类(这很有意义):

我已尝试将
InternalsVisibleTo
属性添加到:

  • 系统
  • System.Web
  • System.Core
但我不能让它工作。这有可能吗

演示:

internal static class InternalClass
{
    public static string Foo = "bar";
}

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<%: InternalClass.Foo %>
编辑:请不要建议其他方法,这不是我要问的


谢谢

视图应使用ViewModels。为什么你要做一些额外的忍者级技巧来渲染这个简单的视图:)?定义视图模型

public class FooViewModel
{
     public string Foo {get;set;}
}
和在控制器中

public ActionResult FooAction
{
     FooViewModel model = new FooViewModel()
     {
          Foo = InternalClass.Foo
     };

     return View(model);
}

那是ASPX视图引擎,对吗?AFAIK会生成一些代码,并将其动态编译到临时Asp.Net文件文件夹中随机命名的程序集中。因此,这意味着您在InternalsVisibleTo属性方面运气不佳


如果您预先编译视图(例如或

),您可能会有一些运气。我还需要来自Umbraco Assemblies的内部类,并提出了此解决方案。将此语句放入要从中使用内部类的AssemblyInfo.cs中:

[assembly: InternalsVisibleTo("ActiveDirectory")]
ActiveDirectory
替换为您自己的程序集。我想使用Umbraco.Core程序集中的内部类,所以我将此语句放在Umbraco.Core中的AssemblyInfo.cs中,它就像一个符咒


注意!不要忘记记录您对Umbraco源代码所做的所有更改,这样当有新版本时,您就可以引入您所做的更改。

我发布的代码只是简单的类比sakeYeah只需使用reflector从内部点击
GeneratorAndomAssemblyName
,所以您是对的。预编译可能是唯一的方法。我会调查此事并向你汇报。Cheers也不认为这会起作用,因为它在内部使用相同的编译器,只是不在运行时,如果不重写视图编译器,可能是不可能的:(
public ActionResult FooAction
{
     FooViewModel model = new FooViewModel()
     {
          Foo = InternalClass.Foo
     };

     return View(model);
}
[assembly: InternalsVisibleTo("ActiveDirectory")]