【问题标题】:Visual Studio publish ignores .js files in Views folder, for .NET Core对于 .NET Core,Visual Studio 发布忽略 Views 文件夹中的 .js 文件
【发布时间】:2018-06-05 10:25:11
【问题描述】:

步骤如下:

  1. 使用 ASP.NET Core Web 应用程序 模板创建一个简单的项目
  2. 在不修改任何内容的情况下将其发布到文件夹中

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

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

然后再次发布。

  1. 现在将Home.js 文件添加到Views/Default 文件夹
  2. 再次发布到文件夹
  3. 如您所见,Home.cshtml 已发布到输出文件夹,但 Home.js 未发布。

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

【问题讨论】:

  • 静态文件应该放在您的wwwroot 或等效文件中
  • Views 文件夹不适用于静态文件。使用wwwroot 文件夹,否则您将需要手动告诉部署文件所在的位置
  • 应该去是应该的。不是必须的。如果我们需要在Views 文件夹中有 js 文件怎么办。一般来说,如果我们在项目中的不同文件夹和位置都有静态文件怎么办?我们应该做哪些配置才能使它们也发布到输出目录?

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


【解决方案1】:

遵守约定是有原因的。它促进了良好的应用程序设计。让静态文件散布在你的项目中不是好的应用设计。尽管如此,你是正确的,ASP.NET Core 是可配置的,并且可以做任何你想做的事情,无论好坏。

这里实际上有两个问题: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"
});

【讨论】:

  • 很好的答案。关键是我不想提供文件。我们有一个自制的框架,它捆绑了所有这些 js 文件并在我们的 SPA 应用程序的主页中提供它们。为了我们的文件系统架构,我们需要将这些文件保存在Views 文件夹中。也就是说,每个jscss 都伴随着其相关的.cshtml 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2019-07-12
  • 2023-03-28
相关资源
最近更新 更多