【问题标题】:"The directory name /app/Views/ is invalid" on ASP.NET Core deployment using docker使用 docker 进行 ASP.NET Core 部署时的“目录名称 /app/Views/ 无效”
【发布时间】:2016-12-23 18:35:24
【问题描述】:

我按照this 文章使用 Docker 设置了一个高性能的 ASP.NET Core 部署。这一直有效,直到我尝试使用调用dotnet MyAppName.dlldocker run 启动容器之前我遇到了一个异常,即 View 路径不存在:

未处理的异常:System.Reflection.TargetInvocationException:调用的目标已引发异常。 ---> System.ArgumentException: 目录名 /app/Views/ 无效。

没错,因为dotnet publish创建的文件夹中只有dll文件,没有View文件夹:

user@server:/etc/jenkins/workspace/App# ll publish-output | grep View
-rwxr--r-- 1 root root 237K Aug 31 19:26 Microsoft.AspNetCore.Mvc.ViewFeatures.dll

我无法理解这一点,因为 View 文件夹也包含在 publishOptions 中,就像 wwwroot 一样,它也丢失了:

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views/**/*.cshtml",
      "Areas/**/*.cshtml"
    ]
  },

我也尝试了"Views" 而不是"Views/**/*.cshtml",但没有工作。据我了解,那些publishOptions 应该导致在使用dotnet publish 时将这些文件夹复制到发布目录。

我做错了什么?

我使用microsoft/aspnetcore-build:1.0.1 图像进行构建,使用microsoft/aspnetcore:1.0.1 启动应用程序,就像文章中推荐的最佳做法一样。

更新 似乎仅在linux上是一个问题。我的 Win10 开发机器工作正常,在那里我得到了从主应用程序和区域发布的所有视图文件夹,如预期的那样。

更新 #2 使用 docker hub 上 aspnetcore-build repo 上的示例,它也不起作用。

更新 #3 我使用 Visual Studio 在我的 Windows 10 开发机器上创建了一个新的 ASP.NET Core MVC 项目,然后将其转移到 linux 盒子:不工作,视图丢失。

更新 #4 直接在 linux 机器上使用 dotnet new -t web 创建了一个新应用程序:按预期工作!

更新 #5 我在 Windows 机器上运行 dotnet new -t web,将创建的文件夹移动到 linux 服务器:不工作 - 奇怪...

【问题讨论】:

    标签: linux docker asp.net-core publish asp.net-core-1.0


    【解决方案1】:

    问题是文档中的点之前缺少空格,它应该引用当前文件夹。

    错误(从 docker 镜像的描述中 1:1 复制)

    RUN dotnet publish --output /out/. --configuration Release
    

    正确

    RUN dotnet publish --output /out/ . --configuration Release
    

    这里缺少空格:--output /out/{Space}

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多