dotnet run不会使用bower包

时间:2017-03-01 23:24:59

标签: visual-studio docker asp.net-core bower .net-core

我有一个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找不到,它只是没有绑定任何Angular的东西。

如果我从Visual Studio(2015)运行相同的项目,它包含/运行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 rundotnet 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>

我在生产/暂存环境中包含了开发中的脚本 - 不再是问题。

2 个答案:

答案 0 :(得分:1)

Bower依赖项通常由dotnet publish根据scripts的{​​{1}}元素处理。如果您不想运行project.json,请尝试在dotnet publishbower install之间运行dotnet restore

答案 1 :(得分:0)

原来我没有将bower的脚本添加到生产代码中。见上面的编辑。