ASP.NET的.cshtml Razor文件在构建时进行转换

5
我正在尝试寻找一种在构建项目时转换我的index.cshtml文件的方法。例如,将其转换为:
<script src="app-dev.js"></script>

当构建模式为Release时,变成这样:

<script src="app-prod.js></script>
2个回答

3

好的,这个会起作用。

为此添加一个应用程序设置:

<add key="Environment" value="dev"/>

然后在你的视图中添加以下内容:

<script src="app-@(System.Web.Configuration.WebConfigurationManager.AppSettings["Environment"]).js></script>

在其他环境中,只需使用转换来替换它,即:

<appSettings>       
    <add key="Environment" value="prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

一种替代方案,我认为更好的方法是将WebConfiguration管理器抽象成一个接口,并在模型中设置应用程序设置。

如果它是在通用布局中设置的,并且每次都设置,可以创建一个基本模型,并在基本控制器中的OnActionExecuted中设置它。


我使用了“appsetting”解决方案,而且它工作得相当不错。唯一的问题是它只在发布时运行,而不是从VS启动应用程序时也能正常工作。谢谢。 - Ludohen
@Ludohen 不错,是的,这个解决方案只有在发布时才能工作,因为它依赖于Web转换。 - hutchonoid
顺便问一下,你如何在控制器中声明/访问这样的环境变量? - Ludohen
如果您只想访问Web配置,您可以在控制器中使用以下代码:System.Web.Configuration.WebConfigurationManager.AppSettings["Environment"]。但是,正如我在答案中提到的那样,您可能希望将其抽象成一个接口服务,以使其更易于测试。 - hutchonoid

0
在我们的情况下,决策必须基于构建是调试构建还是发布构建。我们创建了一个MVC帮助器扩展方法,如下:
        public static MvcHtmlString CustomScriptTag(this HtmlHelper helper)
        { 
            var scriptString = string.Format("<script type='text/javascript' src='{0}'></script>", VirtualPathUtility.ToAbsolute("~/app-prod.js"));

#if DEBUG
            scriptString = string.Format("<script type='text/javascript' src='{0}'></script>", VirtualPathUtility.ToAbsolute("~/app-dev.js"));
#endif

            return new MvcHtmlString(scriptString);
       }

你可以从你的 cshtml 文件中这样调用它:

@Html.CustomScriptTag()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接