2017-03-16 68 views
2

我是ASP.NET Core的忠实粉丝,并且已经从VS2017的第一步到集成的演变,并返回到基于msbuild的项目系统。我也是Google Polymer的忠实粉丝,现在2.0版本已经差不多完成了,我想试试两者的结合。发布聚合物+ ASP.NET核心

我创建了一个ASP.NET Core Web Api项目,它将为Polymer前端实现一个REST API。然后,我在我的命令行指出,wwwroot文件夹并做

polmyer init 

创建它创建的wwwroot文件夹中的一些模板的html文件和目录bower_components的所有基本依赖关系,所有的应用程序模板!

我的问题是:

VS2017具有发布功能,在默认情况下发布的一切,在wwwroot文件夹,但可能会允许我排除特定的文件或文件夹。另一方面,Polymer CLI作为一个构建函数,允许我将ES6编译为ES5,最小化HTML,CSS,JS或all,并捆绑文件。我如何将这两者结合起来为我提供VS2017中的单击发布体验?

回答

3

这是我目前的解决方案:

用VS2017创建一个新的ASP.NET核心的Web应用程序(.NET核心)项目。添加Microsoft.AspNetCore.StaticFiles Nuget包以便能够提供静态文件。

导航到的wwwroot目录用命令行,无需

polymer init 

按照向导来创建你所需要的聚合物的项目类型。

打开的csproj文件中的VS IDE和寻找到的wwwroot目录包含的文件夹中的项目组。注释掉这一行并添加两行新行。第一个防止VS复制整个wwwroot目录。第二个再次添加聚合物构建目录,以便稍后在复制任务中引用它。

<ItemGroup> 
    <!--<Folder Include="wwwroot\" />--> 
    <Content Update="wwwroot\**\*" CopyToPublishDirectory="Never" /> 
    <ClientFiles Include="wwwroot\build\default\**\*" /> 
</ItemGroup> 

(请注意,我用更新代替包含的内容节点!)

创建一个批处理文件聚合物build.cmd具有以下内容并将其放置在项目根目录。这将使聚合物生成客户端文件中的每个VS发布

cd wwwroot 
polymer build 

之前,在这里,你可以添加喜欢--js编译,--css,缩小等选项

的csproj创建一个新的目标节点文件发布

<Target Name="PolymerBuild" BeforeTargets="Publish"> 
    <Exec Command="polymer-build.cmd" /> 
</Target> 

最后创建一个副本任务的另一个目标节点聚合物build目录复制到wwwroot目录之前调用批处理文件

<Target Name="PolymerPublish" AfterTargets="Publish"> 
    <Copy SourceFiles="@(ClientFiles)" DestinationFolder="$(PublishUrl)\wwwroot\%(RecursiveDir)" /> 
</Target> 

加成

你可能还需要抑制打字稿编译,你可以在的csproj通过

<PropertyGroup> 
    <TypeScriptCompileBlocked>True</TypeScriptCompileBlocked> 
</PropertyGroup> 

参考文献做:

0

您可以在Vusual Stddio项目的预生成命令中添加polymer init命令。

+0

感谢但'聚合物初始化'是项目设置期间的一次性任务。它必须是“聚合物构建”( - 选项),我不想在每个VS构建过程中执行它! “聚合物构建”更像VS发布,所以它必须在VS发布或直接在之前(如果有这样的事件)执行。 “聚合物构建”创建一个构建子目录,这是必须由VS发布的,而不是wwwroot中的所有其他文件。对此有何想法? – NicolasR

+0

@NicolasR Polymer和ASP.NET Core如何为您工作?你有没有博客或文档的任何地方。我正在考虑做同样的事情 –

+0

@JordanMcDonald对不起,没有博客:-(到目前为止,我非常喜欢这个组合,我喜欢干净的分离:用于REST API的ASP.NET,用于从具体数据库技术中抽象出来的EF Core,以及一个客户端单页应用程序的聚合物与一个符合标准的组件系统,我也喜欢现在服务器端可以运行在许多平台上,即使是在一个带有Linux的RasPi上,聚合物隐藏了主要浏览器对Web组件的不同支持。在Polymer中定义组件的ES6类语法对于那些来自C++/C#的人来说是一个很大的帮助,但是Polymer社区可能会变得更加伟大, – NicolasR

0

我有一个问题给你,伙计... :-) 我创建了一个Polymer 2应用程序(在Visual Studio代码中,但这个细节并不重要)。我使用es5捆绑的默认设置构建它,并且我看到,在本地时,无论是在主目录中还是在捆绑目录(包括Internet Explorer在内的每个浏览器)中,我都可以正确运行它。
现在,我将所有生成的文件(使用FileZilla,以ftp格式)复制到默认Azure AppService上的目标wwwroot目录中,并且我发现它们都适用于Chrome和FireFox,但不适用于Internet Explorer。
我看到一个空白页面,并打开DOM Explorer,我发现没有任何错误,只加载第一个HTML页面,就好像服务器没有解析任何东西......