【发布时间】:2017-03-01 23:24:58
【问题描述】:
我有一个 asp.net 核心 Web 应用程序,我试图在 Docker 容器中运行。
从powershell,在项目文件中,我可以运行> dotnet restore然后> dotnet run,它将运行一个docker容器:
PS E:\Projects\...> dotnet run
Project MyProject (.NETCoreApp,Version=v1.1) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: E:\Projects\...
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
唯一的问题是,当我转到 localhost:5000 时,似乎没有安装凉亭包(如 Angular)。虽然网页/控制器都可以工作,但前端 Angular 不会运行。
它不会返回 404 not found,它只是不绑定任何 Angular 的东西。
如果我从 Visual Studio (2015) 运行相同的项目,它包含/运行 Angular,不用担心,网站看起来应该。查看源码可以看到已经包含了angular文件。
我的 DockerFile 是:
FROM microsoft/aspnetcore-build
WORKDIR /app
COPY published .
ENTRYPOINT ["dotnet", "MyProject.dll"]
但我认为这是 dotnet run 命令的问题。
如何确保 bower 包被包含并在 docker 容器中运行?
编辑 1
我尝试做dotnet build 然后bower install 然后dotnet run 没有运气。
之后我尝试使用dotnet publish -o published 发布它,然后从发布的目录中使用dotnet MyProject.dll 运行它,它做了同样的事情。
当我从 Visual Studio 运行项目时,页面包含所有脚本:
...
<script src="/lib/jquery/dist/jquery.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
<script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="/js/site.js?v=EWaMeWsJBYWmL2g_KkgXZQ5nPe-a3Ichp0LEgzXczKo"></script>
<script src="/lib/angular/angular.js?v=IuVz88ct2cRJMIP8PVY9rcWTcd2eXzzvz3cdkmfoX2k"></script>
...
但是当我同时使用dotnet run 和dotnet publish 运行它时,dotnet MyProject.dll 这些脚本不包含在页面源代码中。
已修复
原来我在运行dotnet run,这意味着它在生产模式下运行。
视图Views\Shared\Components\_EnvironmentFooter.cshtml 中有一个文件,该文件包含页面的所有脚本。唯一的问题是脚本包含在开发环境中,而不是生产环境中。
<environment names="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
<script src="~/lib/angular/angular.js" asp-append-version="true"></script>
</environment>
<environment names="Staging,Production">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
我将开发中的脚本包含在生产/暂存环境中 - 不再是问题。
【问题讨论】:
标签: visual-studio docker asp.net-core bower .net-core