RazorGenerator 看不到自定义 cshtml 助手
RazorGenerator can't see custom cshtml helper
我在使用 RazorGenerator 时遇到问题:它无法编译使用我的自定义助手的视图:
App_Code/ViewHelper.cshtml
@helper test(System.Web.Mvc.HtmlHelper html)
{
<h4>Test</h4>
}
Views/Test.cshtml
(...)
@ViewHelper.test(this.Html)
(...)
当我尝试编译我的项目时,出现 Test.cshtml:
的错误
The name 'ViewHelpers' does not exist in the current context
我尝试将各种命名空间添加到我的 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 文件。这可能是 class-name 问题,所以将其添加到您的帮助程序 cshtml-file 的顶部:
@* GeneratePrettyNames : true *@
事实证明,我需要编译助手本身才能使其正常工作。
但这并没有让我走得太远:RazorGenerator 无法 "see" Mvc 命名空间引用。我读到 RG 与 MVC 版本 5.0 或更高版本不兼容(或者是吗?)。
当我更新到 MVC 5 时,我遇到了与 RazorGenerator 相同的问题。
根据 this discussion on RazorGenerator's codeplex,似乎 RazorGenerator.MsBuild 包有时在解析要使用的正确 Razor 版本时遇到问题,因此最终缺少 web.config 中定义的命名空间.
要强制它使用正确版本的 Razor(并希望获取您的命名空间),请在项目文件夹中创建一个名为 razorgenerator.directives
的文件,其中包含以下文本:RazorVersion: 3
解决方案:
您需要将此评论放在您在 App_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>
将 YourWebAppNamespace
更改为您的默认项目名称空间(可能是您的项目名称):
解释:
RazorGenerator 将您的助手视为普通的 razor 视图,因此生成的代码如下所示:
[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) {
您需要添加这些指令注释来告诉剃刀生成器创建 class 名称为 "normal"(与辅助文件名相同,您可以使用 GeneratePrettyNames
指令)和具有静态 public 函数,因此它可以在其他视图中使用(由 Generator: MvcHelper
指令完成)。
使用这些指令注释 RazorGenerator 生成 C# 文件,如下所示:
[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_Code
修复是将以下内容添加到我的帮助文件的顶部
@*
Generator: MvcHelper
GeneratePrettyNames: true
Namespace: My.Projects.Namespace
*@
有了这个,就没有 web.config 改变或任何其他需要做的事情了。
我在使用 RazorGenerator 时遇到问题:它无法编译使用我的自定义助手的视图:
App_Code/ViewHelper.cshtml
@helper test(System.Web.Mvc.HtmlHelper html)
{
<h4>Test</h4>
}
Views/Test.cshtml
(...)
@ViewHelper.test(this.Html)
(...)
当我尝试编译我的项目时,出现 Test.cshtml:
的错误The name 'ViewHelpers' does not exist in the current context
我尝试将各种命名空间添加到我的 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 文件。这可能是 class-name 问题,所以将其添加到您的帮助程序 cshtml-file 的顶部:
@* GeneratePrettyNames : true *@
事实证明,我需要编译助手本身才能使其正常工作。
但这并没有让我走得太远:RazorGenerator 无法 "see" Mvc 命名空间引用。我读到 RG 与 MVC 版本 5.0 或更高版本不兼容(或者是吗?)。
当我更新到 MVC 5 时,我遇到了与 RazorGenerator 相同的问题。
根据 this discussion on RazorGenerator's codeplex,似乎 RazorGenerator.MsBuild 包有时在解析要使用的正确 Razor 版本时遇到问题,因此最终缺少 web.config 中定义的命名空间.
要强制它使用正确版本的 Razor(并希望获取您的命名空间),请在项目文件夹中创建一个名为 razorgenerator.directives
的文件,其中包含以下文本:RazorVersion: 3
解决方案:
您需要将此评论放在您在 App_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>
将 YourWebAppNamespace
更改为您的默认项目名称空间(可能是您的项目名称):
解释:
RazorGenerator 将您的助手视为普通的 razor 视图,因此生成的代码如下所示:
[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) {
您需要添加这些指令注释来告诉剃刀生成器创建 class 名称为 "normal"(与辅助文件名相同,您可以使用 GeneratePrettyNames
指令)和具有静态 public 函数,因此它可以在其他视图中使用(由 Generator: MvcHelper
指令完成)。
使用这些指令注释 RazorGenerator 生成 C# 文件,如下所示:
[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_Code
修复是将以下内容添加到我的帮助文件的顶部
@*
Generator: MvcHelper
GeneratePrettyNames: true
Namespace: My.Projects.Namespace
*@
有了这个,就没有 web.config 改变或任何其他需要做的事情了。