Visual Studio发布忽略视图文件夹中的.js文件,用于.NET Core

时间:2018-06-05 10:25:12

标签: c# visual-studio asp.net-core asp.net-core-mvc publish

以下是步骤:

  1. 使用 ASP.NET核心Web应用程序模板
  2. 创建一个简单项目
  3. 将其发布而不修改任何内容,发布到文件夹
  4. 如果Views文件夹不在发布的输出中,那么因为您的.NET Core版本默认编译视图。只需将其添加到.csproj

    即可
    <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
      </PropertyGroup>
    

    再次发布。

    1. 现在将Home.js文件添加到Views/Default文件夹
    2. 再次发布到文件夹
    3. 如您所见,Home.cshtml已发布到输出文件夹,但Home.js未发布。
    4. 这里有什么问题?这使我们的部署引擎效率低下,我们需要手动保持.js个文件同步。

1 个答案:

答案 0 :(得分:3)

遵循惯例是有原因的。它促进了良好的应用程序设让静态文件遍布整个项目并不是一个好的应用程序设计。尽管如此,你是正确的,ASP.NET Core是可配置的,可以做任何你想做的事情,无论好坏。

您实际上在这里遇到了两个问题:1)Views目录中的文件未包含在发布中; 2)Views目录未服务。即使你成功地在发布中包含静态文件,它也是一个不可思议的胜利,因为你实际上无法在你的网页中使用这些文件。

我无法通过用户界面将整个目录复制到输出 - 只有单个文件。但是,通过编辑项目文件,您可以添加以下内容:

<ItemGroup>
    <Content Include="Views\**\*.js" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

然后只是让你知道实际提供这些文件的问题,这会变得更有问题,因为你不能只提供一些文件,而只能提供整个目录。这意味着可能会在Views目录中暴露任何内容。不过,如果你坚持:

app.UseStaticFiles(); // For the wwwroot folder

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), "Views")),
    RequestPath = "/Views"
});