【问题标题】:Publishoptions recursively creating cshtml filesPublishoptions递归创建cshtml文件
【发布时间】:2016-10-18 20:03:33
【问题描述】:

我有 ASP.NET Core 应用程序。在project.json 中,我将发布选项配置如下

"publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "appsettings.development.json",
      "appsettings.staging.json",
      "appsettings.production.json",
      "web.config"
    ]
  },

我正在使用由 vs 2015 为 asp.net 核心 web 项目创建的默认项目模板。所以所有.cshtml 文件都在Views 文件夹下。

当我执行dotnet publish -c Development 命令时,dotnet 会在

下发布视图

C:\MySolutionDir\Src\MyUIProjectDir\bin\Development\netcoreapp1.0\publish\Views

然后我再次执行相同的命令。这次bin\Development\netcoreapp1.0\publish\Views下已经有cshtml文件了,所以这次发布命令额外创建了如下文件夹结构

C:\MySolutionDir\Src\MyUIProjectDir\bin\Development\netcoreapp1.0\publish\bin\Development\netcoreapp1.0\publish\Views

如果我再次执行该命令,那么它会创建

C:\MySolutionDir\Src\MyUIProjectDir\bin\Development\netcoreapp1.0\publish\bin\Development\netcoreapp1.0\publish\bin\Development\netcoreapp1.0\publish\Views

它基本上递归地在“MyUIProjectDir”下找到 .cshtml 文件,并不断创建 Views 文件夹的深层层次结构。

我还有其他环境,有文件夹之类的

 C:\MySolutionDir\Src\MyUIProjectDir\bin\Staging
 C:\MySolutionDir\Src\MyUIProjectDir\bin\Production

发布命令还将 cshtml 从“暂存”和“生产”复制到开发中。

如何解决此问题,因此发布命令仅从“MyUIProjectDir\Views”文件夹(而不是 bin)复制 cshtml

【问题讨论】:

  • 如果将“**/ *.cshtml”替换为“视图”会怎样?因为 **/ * 模式也会在 wwwroot 文件夹中查找文件

标签: asp.net-core coreclr


【解决方案1】:

**/* 模式还会在wwwroot 文件夹中查找文件。你有两个选择:

  • 修改**/ *.cshtml 模式以仅在特定文件夹中搜索.cshtml,或者直接将文件夹包含在您的.cshtml 文件中(我猜是Views):

    "publishOptions": {
       "include": [
          "wwwroot",
          "Views",
          ...
       ]
    }
    
  • 排除发布位于wwwroot 文件夹中的.cshtml 文件。在publishOptions 中使用exclude 部分:

    "publishOptions": {
      "exclude": [
          "wwwroot/*.cshtml"
      ]
    

【讨论】:

    【解决方案2】:

    作为Set said in his comment,您应该包含您的Views 文件夹,因为** 将搜索您的解决方案中的所有位置,包括wwwroot 文件夹。

    从其他环境文件夹复制的 .cshtml 文件的行为相同,因为 ** 将从项目的根文件夹开始递归搜索。

    "publishOptions": {
        "include": [
          "wwwroot",
          "Views",
          "appsettings.json",
          "appsettings.development.json",
          "appsettings.staging.json",
          "appsettings.production.json",
          "web.config"
        ]
      },
    

    【讨论】:

      【解决方案3】:

      唯一对我有用的是明确排除 bin 和 obj 文件夹。

      "publishOptions": {
      "include": [
        "wwwroot",
        "Views",
        "appsettings.json",
        "web.config"
      ],
      "exclude": [
        "bin",
        "obj"
      ]  }
      

      在发布之前,我还必须删除 AppData\Local\temp\PublishTemp 文件夹中的所有内容。由于某种原因,它仍在使用旧设置,直到我从 PublishTemp 文件夹中删除所有内容。

      【讨论】:

        猜你喜欢
        • 2012-06-12
        • 1970-01-01
        • 2014-04-09
        • 2020-11-22
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2010-12-04
        相关资源
        最近更新 更多