Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET 5保持wwwroot';清洁';_Asp.net_Asp.net Core - Fatal编程技术网

ASP.NET 5保持wwwroot';清洁';

ASP.NET 5保持wwwroot';清洁';,asp.net,asp.net-core,Asp.net,Asp.net Core,我在一个网站上工作,我使用ASP.NET 5 CLR(rc1 final x64)。 我想让我的wwwroot文件夹“干净”。我觉得wwwroot中应该存在的所有内容都应该在构建时或通过任务(例如通过Grunt)添加。我使用Grunt来实现这一点,它可以很好地处理JavaScript和CSS文件 现在我正在向我的网站添加图片。现在我的.gitignore说要排除wwwroot。我不知道如何将图像从wwwroot外部移动到内部。有没有什么好方法可以将文件移动到wwwroot?我真的希望我的wwwr

我在一个网站上工作,我使用ASP.NET 5 CLR(rc1 final x64)。 我想让我的wwwroot文件夹“干净”。我觉得wwwroot中应该存在的所有内容都应该在构建时或通过任务(例如通过Grunt)添加。我使用Grunt来实现这一点,它可以很好地处理JavaScript和CSS文件

现在我正在向我的网站添加图片。现在我的.gitignore说要排除wwwroot。我不知道如何将图像从wwwroot外部移动到内部。有没有什么好方法可以将文件移动到wwwroot?我真的希望我的wwwroot“干净”,没有任何库。我在wwwroot之外有这些文件,所以我不会意外地提供不需要的文件

我想把他们从: [应用程序根]/static/img到wwwroot/img

目前,我有以下grunt任务:

  • 咕噜咕噜
  • grunt contrib cssmin
  • 粗声粗气
我认为这可能非常有效,因为在构建过程中,我们每次都需要移动所有文件

有没有办法做得更好/更有效

编辑#1: 是的,所以我读了文档:。 实际上,我可以将一个参数传递给
app.UseStaticFiles()
方法,如下所示:

app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(@"D:\Source\WebApplication1\src\WebApplication1\MyStaticFiles"),
        RequestPath = new PathString("/StaticFiles")
    });
这里的
PhysicalFileProvider
包含绝对路径。这里可以使用相对路径吗

编辑#2: 实际上,这是可行的:

public void Configure(IApplicationBuilder app, IHostingEnvironment environment, ILoggerFactory loggerFactory, IApplicationEnvironment appEnvironment)
{
    app.UseIISPlatformHandler();
    app.UseDeveloperExceptionPage();

    app.UseMvcWithDefaultRoute()
        .UseStaticFiles()
        .UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(string.Concat(appEnvironment.ApplicationBasePath,"/static/images")),
            RequestPath = new PathString("/img")
        });
}
在这里,我们添加了两次
UseStaticFiles
中间件来服务默认的wwwroot。我们还将从图像所在的解决方案中提供文件


但是,我不知道添加两次这个中间件是否会有任何性能或安全问题或其他问题。您需要小心在该文件夹中添加的内容。至少不应启用目录浏览。

确实要保持wwwroot“干净”吗

您无法轻松地引用wwwroot之外的静态内容,因此将静态文件保留在wwwroot之下并将其隔离到dev vs production的子文件夹中,然后在project.json中使用publishexclude省去dev内容,这难道不是更有意义吗

我自己,我只想在发布之前运行grunt任务来生成文件的生产集,然后我想不发布文件的开发版本。我不希望运行grunt只是为了移动文件,以便在开发过程中使用它们,也不希望每次编辑js文件的dev/src版本时都运行grunt

这种方法的问题变得更加明显,如果你使用像ckeditor这样的东西,我不想在文件系统中复制或移动大量的文件,最多我会在预发布时移动它们一次,以便在我将其移动到生产文件夹时清除任何额外的文件

早在MVC5中,就没有将静态文件与代码分离的概念,web应用程序只是从同样的根应用程序目录中提供文件,而根应用程序目录中也有服务器端代码。当时,在/Content文件夹中保存静态文件或在其他文件夹中保存js是有意义的。但在我看来,在MVC6/aspnet5中,试图将静态资产保持在wwwroot之外的做法似乎是违背事实的


通过将所有静态资产(包括它们的开发版本)保存在wwwroot下面,我有了一个简单的工作流,在这里我可以编辑一个js文件并刷新页面。这感觉就像我在使用框架,而不是反对它。

只是好奇,为什么wwwroot不是源代码控制的,为什么不将图像放在wwwroot中?这些图像是静态的还是动态的(比如产品图像等等)?这是因为我在wwwroot中有我的组合和缩小的文件(CSS和JavaScript)。我将所有源文件保留在wwwroot之外。是的,这些图像是静态的。我们有和你相同的场景。我们在wwwroot中有我们的组合和丑陋的样式表和脚本,但我们从不提交缩小和连接的脚本。有一个适当的限制,使开发人员不会意外地提交它们。脚本在构建服务器上被缩小和连接。优化图像也是如此。这对我们来说已经足够“干净”了。我不是说这是推荐的方法。我想说的是,当存在简单的解决方案时,有时我们倾向于将事情过度复杂化。限制是什么?它在SCM中吗?你的静态图像在哪里?此外,我在问题的编辑(2)中添加了一个可能的解决方案。限制在源代码管理中,通过或中的服务器端挂钩。静态图像位于
wwwroot
我完全明白你的意思。现在我也明白了为什么他们选择将bower和节点模块从wwwroot的外部移动到内部。每次我想更改CSS或JavaScript文件中的某些内容时,我都需要运行grunt。这其实是我不想做的事情。正如你所说,我想在发布时运行它们。我想当涉及到源代码控制时,我们需要从wwwroot中排除一些文件夹,例如:节点\模块、生成的文件、bower\ u组件等。我目前正在使用Git,我想我应该将这些文件夹添加到我的.gitignore?您如何处理此类问题?是的,没错,在我的项目中,我使用gitignore来排除来自npm/bower的开发工具。我把我的自定义dev-js文件放在另一个文件夹中,我确实想把它放到repo中。我还从gitignore中排除了我的production js文件夹,因为这是处理事情的地方。我使用publishexclude from project.json来确保只发布生产资料。所以所有这些都在wwwroot下面,但是被组织到子文件夹中。你仍然在使用这种方法,还是找到了更好的替代方法?听起来您有
wwwroot\dev\node\u模块
,直接引用静态内容,所以您不需要每次都复制?因此,当您发布文件夹结构更改时,您可能需要更新任何引用?或者你保持同样的fol