在ASP.NET MVC6中,默认情况下从wwwroot提供静态文件。
wwwroot目录由project.jsonwebroot定义(如此处所示:http://docs.asp.net/en/latest/fundamentals/static-files.html)

我想知道是否有可能在运行时(启动时)以编程方式设置此webroot

我想在运行时切换webroot,具体取决于在调试或生产模式下运行。由于我的静态 Assets (JS,CSS ...)是在构建时进行处理的(并置,缩小...),因此我认为最好的方法是拥有一个包含源 Assets 的目录和一个包含优化 Assets 的目录(构建输出)。

在运行时,我想在生产模式下运行时将webroot指向优化的 Assets 。

有人知道如何以编程方式设置webroot吗?

更新2015-11-19:在我的场景中,我只想使用静态文件。如答案中所指出的,当在Razor中使用html的服务器端呈现时,可以使用TagHelpers(http://blogs.msdn.com/b/cdndevs/archive/2015/08/06/a-complete-guide-to-the-mvc-6-tag-helpers.aspx)实现不同 Assets 之间的切换。

最佳答案

我会走另一条路。

首先,当您F5应用程序时,它会自动将ASPNET_ENV设置为Development。然后在Razor中,您可以使用TagHelpers这样切换资源:

<environment names="Development">
    <link rel="stylesheet" href="~/css/site1.css" />
    <link rel="stylesheet" href="~/css/site2.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="~/css/site.min.css" asp-file-version="true"/>
</environment>

这将允许您根据实际运行的环境来更改资源/javascript甚至HTML。

唯一缺少的是在登台和生产机器上设置ASPNET_ENV,它将被自动提取。无需动态更改wwwroot

如果您真的想更改wwwroot,对我来说这将是部署任务,而不是运行时步骤。

否则,在您已链接的静态文件上使用check the documentation。它提供了有关如何在运行时链接到不同文件夹的代码示例。也许您缺少的是对IHostingEnvironment的依赖,它将为您提供Environment变量来决定您所处的环境。

关于ASP.NET MVC6 : Setting webroot programmatically,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33467222/

10-11 06:41