2016-09-09 5 views
1

私はCore Coreプロジェクトに取り組んでいますが、Core Webプロジェクトに追加できるNuGetパッケージとして公開したいと考えています。実際には、いくつかの部分を除いて、コントローラ、ビュー、サービスクラス、モデル、ビューなど、プロジェクト内の領域(つまり、/ Areas/MyArea)に完全に限定されています。本当に、これらは私が魔法のように、既存のWebアプリケーションに追加してみたい作品です。ASP.NETコアアプリケーション領域をNuGetパッケージとしてパッケージ化する方法はありますか?

  • 面積を、すべてがでそれ
  • wwwrootに/ libに/ myappの
  • エントリ内でそのCSSやJSルート

でスタートアップクラス

  • MyApp.json私はNuGetパッケージの依存関係を復元します知っているが、私はそれはまた、クライアント側のパッケージを検討するかどうかはわかりません。

    提案がありますか?このためにNuGetは間違ったツールですか?

  • 答えて

    1

    現在のところ、ウェブアプリケーションには、ナゲットパッケージからファイルを配信することはできません。私は、将来可能にすることについていくらかの議論と作業が行われていると思います。

    私は私のプロジェクトでproject.jsonで、このように行われているビューと必要な静的なJSとCSSリソースを埋め込むことであることを取り扱いしています方法:

    「buildOptions」:{ 「埋め込み」を:[ "ビュー/ "、 "JS/"、 "CSS/**"]} 、

    私はcontroller to serve my static resourcesを作成しました:

    public class cscsrController : Controller 
    { 
        private ContentResult GetContentResult(string resourceName, string contentType) 
        { 
         var assembly = typeof(cscsrController).GetTypeInfo().Assembly; 
         var resourceStream = assembly.GetManifestResourceStream(resourceName); 
         string payload; 
         using (var reader = new StreamReader(resourceStream, Encoding.UTF8)) 
         { 
          payload = reader.ReadToEnd(); 
         } 
    
         return new ContentResult 
         { 
          ContentType = contentType, 
          Content = payload, 
          StatusCode = 200 
         }; 
        } 
    
        [HttpGet] 
        [AllowAnonymous] 
        public ContentResult bootstrapdatetimepickercss() 
        { 
         return GetContentResult(
          "cloudscribe.Core.Web.css.bootstrap-datetimepicker.min.css", 
          "text/css"); 
        } 
    
        [HttpGet] 
        [AllowAnonymous] 
        public ContentResult momentwithlocalesjs() 
        { 
         return GetContentResult(
          "cloudscribe.Core.Web.js.moment-with-locales.min.js", 
          "text/javascript"); 
        } 
    
    } 
    

    、私はコントローラのアクションにリンク私がjsやcssをロードする必要があるビューで。埋め込みビューは、私がRazorViewEngineOptionsの拡張メソッドを作成し動作させるために

    public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCore(this RazorViewEngineOptions options) 
    { 
        options.FileProviders.Add(new EmbeddedFileProvider(
          typeof(SiteManager).GetTypeInfo().Assembly, 
          "cloudscribe.Core.Web" 
         )); 
    
        return options; 
    } 
    

    と、この本のようなウェブアプリStartupにConfigureServicesから呼び出されている必要があります

    services.AddMvc() 
        .AddRazorOptions(options => 
        { 
         options.AddEmbeddedViewsForCloudscribeCore(); 
    
        }) 
        ; 
    

    この手法なければなりませんエリアでも同じように動作します。 1つの素晴らしい点は、ユーザーがビューをダウンロードしてローカルにインストールできることで、埋め込みビューの使用が上書きされるため、一部またはすべてのビューを簡単にカスタマイズできることです。ビューをオーバーライドすることで、必要に応じてjsとcssを手動でインストールし、カスタマイズが必要な場合は、それらのローカルファイルにリンクするようにビューを変更することもできます。最終的な結果は私のナゲットが必要とするすべてのものを持っているため、スタートアップの設定だけで動作するようになっています。

    +0

    ファイルを追加できないことは間違いありません。 DIコンテナライブラリの中には(PowerShellスクリプトを使用した場合など)StructMap MVCなどのものがあります。 –

    +0

    実際にはパッケージにファイルを追加することはできますが、.NET用のアプリケーションにそれらを配信することはできません。core nugets afaik https://github.com/NuGet/Home/issues/2262 –

    +0

    powershellは現在オープンソースクロスプラットフォームではありますが、少なくとも現時点ではナゲットとクロスプラットフォームの方法でそれを実際に使用できるかどうかはわかりません –

    関連する問題