2015-11-01 12 views
5

ASP.NETでは、MVC6静的ファイルはデフォルトでwwwrootから提供されます。 (ここでは文書化されているように:http://docs.asp.net/en/latest/fundamentals/static-files.htmlASP.NET MVC6:Webルートをプログラムで設定する

ディレクトリwwwrootは、キーwebrootproject.jsonで定義されている

プログラム(起動時に)実行時にこのwebrootを設定することが可能である場合、私は疑問に思って。

デバッグモードまたはプロダクションモードで実行している場合、実行時にwebrootに切り替えたいとします。私の静的assest(JS、CSS ...)はビルド時に処理されるので(連結、縮小など)、ソースアセットを持つディレクトリと、最適化されたアセットを含むディレクトリ(ビルド出力)。

実稼働モードで実行しているときに、実行時にwebrootを最適化アセットに設定したいと考えています。

webrootをプログラムで設定する方法を知りましたか?

更新2015-11-19:私のシナリオでは、静的ファイルのみを使用したいと考えています。回答で指摘されているように、Razorでhtmlのサーバー側レンダリングを使用する場合、TagHelpers(http://blogs.msdn.com/b/cdndevs/archive/2015/08/06/a-complete-guide-to-the-mvc-6-tag-helpers.aspx)を使用して、異なるアセットを切り替えることができます。

答えて

2

The documentation describes how to set up static file serving from any directory.

私の問題の解決策は、このようなホスティング環境に基づいて静的なファイルを提供するディレクトリを切り替えることでした(html、javascript、css)をwwwsrcに置き、そのディレクトリから開発中に未処理のまま提供してください。

私のフロントエンドビルドは、wwwsrcでアセットを処理し、最適化されたアセット(連結、最小化、リビジョン、および参考文献をhtmlで調整)をwwwrootに配置します。

リリースビルドをテストしたい場合は、wwwrootから送信できます。

デバッグプロファイル(プロジェクト - >プロパティ - >デバッグまたはファイルProperties/launchSettings.json)で環境変数ASPNET_ENVを設定することで、デバッグビルドとリリースビルドを切り替えることができます。

@Maxime Rouillerのおかげで、彼の答えは正しい方向に向いてくれました。

2

私は別の方法をとるだろう。

最初に、アプリケーションをF5すると、自動的にASPNET_ENVDevelopmentに設定されます。カミソリでは、あなたは、このようなあなたのリソースを切り替えるTagHelpersを使用することができます。

<environment names="Development">    
    <link rel="stylesheet" href="~/css/site1.css" /> 
    <link rel="stylesheet" href="~/css/site2.css" /> 
</environment> 
<environment names="Staging,Production"> 
    <link rel="stylesheet" href="~/css/site.min.css" asp-file-version="true"/> 
</environment> 

これは、あなたが実際に動作している環境に基づいて/ javascriptのかさえもHTMLリソースを変更することができます。

唯一欠けているのは、ステージングおよびプロダクションマシンのASPNET_ENVを設定することです。自動的に選択されます。動的にwwwrootを変更する必要はありません。

wwwrootの変更に固執したいのであれば、ステップではなく、デプロイメントタスクになります。

それ以外の場合は、既にリンクしている静的ファイルのcheck the documentation。実行時に異なるフォルダにリンクする方法に関するコード例を提供します。あなたが欠けているのは、IHostingEnvironmentに依存していることです。環境変数を使って、あなたがどの環境にいるかを決めることができます。私はすべての私のフロントエンドの資産を置くことができ、この設定では

public class Startup 
{ 
    private IHostingEnvironment env; 
    public Startup(IHostingEnvironment env) 
    { 
     this.env = env; 
    } 

    public void Configure(IApplicationBuilder app) 
    { 

     if (env.IsDevelopment()) 
     { 
      var webRootPath = env.WebRootPath; 
      var webSrcPath = webRootPath + @"\..\wwwsrc"; 
      app.UseDefaultFiles(new DefaultFilesOptions() 
      { 
       FileProvider = new PhysicalFileProvider(webSrcPath), 
       RequestPath = new PathString("") 
      }); 
      app.UseStaticFiles(new StaticFileOptions() 
      { 
       FileProvider = new PhysicalFileProvider(webSrcPath), 
       RequestPath = new PathString("") 
      }); 
     } 
     else 
     { 
      app.UseDefaultFiles(); 
      app.UseStaticFiles(); // use wwwroot 
     } 
    } 

+0

環境に応じて実行時にerver側でhtmlをレンダリングするのに役立つタグヘルパーを指摘してくれてありがとう。しかし私のシナリオでは、私はRazor /サーバーサイドのレンダリングをまったく使用していないので、静的な塗りつぶしだけで作業したいと思います...(私はそれに応じて質問を更新しました) – jbandi

+1

私の答えが更新されました。 –

関連する問題