Visual Studio 发布会忽略 .NET Core 的 Views 文件夹中的.js文件



以下是步骤:

  1. 使用核心 Web 应用程序模板创建简单项目 ASP.NET
  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文件同步。

遵循约定是有原因的。它促进了良好的应用程序设计。静态文件散落在您的项目中并不是好的应用程序设计。不过,您是正确的,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"
});

最新更新