首页 文章

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

提问于
浏览
0

这是步骤:

  • 使用ASP.NET Core Web Application模板创建一个简单的项目

  • 将其发布而不修改任何内容,发布到文件夹

如果Views文件夹不在发布的输出中,那是因为您的.NET Core 版本默认编译视图。只需将其添加到.csproj

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

并再次发布。

  • 现在将Home.js文件添加到Views/Default文件夹

  • 再次发布到文件夹

  • 如您所见,Home.cshtml发布到输出文件夹,但Home.js不发布。

这有什么不对?这使我们的部署引擎效率低下,我们需要手动保持.js文件同步。

1 回答

  • 3

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

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

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

    <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"
    });
    

相关问题