2017-03-16 84 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頁面,就好像服務器沒有解析任何東西......