在ASP.NET MVC6中,默认情况下从wwwroot
提供静态文件。wwwroot
目录由project.json
键webroot
定义(如此处所示: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/