C# RazorGenerator can';看不到自定义的cshtml帮助程序

C# RazorGenerator can';看不到自定义的cshtml帮助程序,c#,model-view-controller,razorgenerator,C#,Model View Controller,Razorgenerator,RazorGenerator有问题:它无法编译使用自定义帮助程序的视图: 应用程序代码/ViewHelper.cshtml @helper test(System.Web.Mvc.HtmlHelper html) { <h4>Test</h4> } 尝试编译项目时,Test.cshtml出现以下错误: 当前上下文中不存在名称“ViewHelpers” 我尝试将各种名称空间添加到我的Views/web.config文件: <system.web.

RazorGenerator有问题:它无法编译使用自定义帮助程序的视图:

应用程序代码/ViewHelper.cshtml

@helper test(System.Web.Mvc.HtmlHelper html)
{
    <h4>Test</h4>    
}
尝试编译项目时,Test.cshtml出现以下错误:

当前上下文中不存在名称“ViewHelpers”

我尝试将各种名称空间添加到我的Views/web.config文件:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.Optimization" />
        <add namespace="MyProject" />
        <add namespace="Kendo.Mvc.UI" />
        <add namespace="MvcSiteMapProvider.Web.Html" />
        <add namespace="MvcSiteMapProvider.Web.Html.Models" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

但是没有成功


我是否缺少一些应包含在此文件中的命名空间?如果没有,是否有其他方法使RazorGenerator编译该视图?此外,cshtml帮助程序是否存在于命名空间中?

查看在帮助程序的obj\CodeGen文件夹中生成的实际cs文件。这可能是类名问题,因此请将其添加到helper cshtml文件的顶部:

@* GeneratePrettyNames : true *@

事实证明,我需要编译helper本身以使其工作


但这并没有让我走多远:RazorGenerator无法“看到”Mvc命名空间引用。我已经读到RG与MVC 5.0或更高版本不兼容(或者是吗?)

当我更新到MVC 5时,RazoGenerator也有同样的问题

根据,RazorGenerator.MsBuild包有时在解析要使用的Razor的正确版本时出现问题,因此最终会丢失web.config中定义的名称空间

要强制它使用正确版本的Razor(并希望选择您的名称空间),请在项目文件夹中创建一个名为
razorgenerator.directives
的文件,其中包含以下文本:
RazorVersion:3

解决方案: 您需要将此注释放在
App\u code
中助手的开头:

@*
    Generator: MvcHelper
    GeneratePrettyNames : true
*@
然后在
web.config
中为razor页面进行配置,您需要添加RazorGenerator为这些帮助程序生成的命名空间:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>                
            <add namespace="YourWebAppNamespace.App_Code" />
        </namespaces>
    </pages>
</system.web.webPages.razor>
您需要添加这些指令注释,以告诉razor generator使用“普通”名称(与帮助文件名相同,您可以使用
GeneratePropertyNames
directive)和静态公共函数创建类,以便它可以在其他视图中使用(由
generator:MvcHelper
directive完成)。 使用这些指令注释,RazorGenerator生成如下C#文件:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
    [System.Web.WebPages.PageVirtualPathAttribute("~/App_Code/TestHelper.cshtml")]
    public partial class _App_Code_TestHelper_cshtml : Komplett.Chrome.Web.Features.Shared.BaseView<dynamic>
    {

#line 3 "..\..\App_Code\TestHelper.cshtml"
public System.Web.WebPages.HelperResult HelperName(string name) {
    [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
    public class TestHelper : System.Web.WebPages.HelperPage
    {

#line 6 "..\..\App_Code\TestHelper.cshtml"
public static System.Web.WebPages.HelperResult HelperName(string name) {

您现在只需要将名称空间添加到
web.config
中,以便其他视图的C生成代码将使用using语句与此生成的帮助程序的名称空间一起使用。

我正在使用
RazorGenerator.MsBuild
编译我的视图,并使用
RazorGenerator.Mvc
加载它们。对我来说,最简单的
App\u code
修复方法是将以下内容添加到我的助手文件的顶部

@*
Generator: MvcHelper
GeneratePrettyNames: true
Namespace: My.Projects.Namespace
*@

这样就不需要对web.config进行任何更改或进行任何其他操作。

错误状态为“ViewHelpers”,并在末尾加上一个s。你确定你没有写@ViewHelpers.test(this.Html)?在我的例子中,我还必须将生成的helper cs文件的“构建操作”更改为“编译”(它被设置为“内容”)@youen,我使用RazorGenerator.MsBuild而不是VS plugin生成代码,所以我没有这个问题。:)我按照描述做了,我还需要附加
RazorVersion:3
,否则项目在第一次尝试时没有编译(奇怪的是,它会在后续尝试中编译)
@*
Generator: MvcHelper
GeneratePrettyNames: true
Namespace: My.Projects.Namespace
*@