【发布时间】:2016-12-23 18:35:24
【问题描述】:
我按照this 文章使用 Docker 设置了一个高性能的 ASP.NET Core 部署。这一直有效,直到我尝试使用调用dotnet MyAppName.dll 的docker 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