2009-05-21 12 views
8

私は、人々が条件付きマークアップをどのように処理するのか、特にリリースとデバッグビルドの間のマスターページを聞くことに興味があります。JS/CSSのセクション置換、デバッグとリリースの比較

これは、結合されたjsおよびcssファイルの処理に適用される特定のシナリオです。私は現在、YUI圧縮の.Netポートを使用して、別々のファイルの大きなコレクションから単一のsite.cssとsite.jsを生成しています。

ユーザーコントロールまたはパネルのコレクションにセクションjsおよびcssを配置し、アセンブリのデバッグまたは解放状態に基づいておよび<script>のマークアップを条件付きで表示するという考えがありました。線に沿って何か:

#if DEBUG 
    pnlDebugIncludes.visible = true 
#else 
    pnlReleaseIncludes.visible = true  
#endif 

パネルは本当に意味的に非常に素晴らしいではありません - <div><script>タグを包むビット総額です。より良いアプローチが必要です。私はまた<div><head>の範囲内のブロックレベルの要素は無効なhtmlと考えています。

もう1つのアイデアはweb.configセクションの置き換えを使用して処理できる可能性がありますが、どうやってそれをやっていくのかは分かりません。

+0

。YUI圧縮のネットポート - ありがとう、私は自分のjsファイルを連結するこのようなものを探してきました。 –

+0

OMG - 私はYUIの.NETポートを行ったその人を知っています。小世界など。 –

答えて

5

ここでweb.configファイルの設定の変更にまともな議論があります:

Using different Web.config in development and production environment

注:あなたは別の質問をしていますが、ライブとデバッグの設定を切り替える方法のすばらしいコレクションであり、すべての回答(IMO)には価値があります。投票された/受け入れられた最高の答えです。

個人的には、私が使用する方法は、ここで説明し、それが最も柔軟だと思うと、それはファイルベースであるが、それらは自動スワップソリューション構成に基づいてすることができますよう、設定の変更のすべてのタイプに適用されます。

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

基本的には、ビルド前のイベントを実行して、Web設定をディスク上の別のものと置き換え、ソリューション構成名をファイル名に追加します。たとえば、私はweb.config.release、web.config.debug、さらにはweb.config.neilathomeを持っています。

次に、部分クラスを作成し、私のソリューション構成間で変更を加えることで、条件付きビットのコードとまったく同じメソッドを自分のファイルに使用します。たとえば、sync_timersettings.csは、更新コードがWebサービスを呼び出す頻度を定義するいくつかの定数を含む部分クラスです。あるいは、すべての設定をapp.settingsファイルに入れて、そうすることができます。

私は非常に柔軟な解決策を見つけました。それはjavascriptとcssの断片を入れ替えることができます。また、設定間で自分のファイルに変更を加える時間があれば、おそらくデバッグソリューション構成でデバッグしてから、ワンクリックでリリースおよび展開に切り替えることができます。

ワンさらにノート:コメントへの

#if DEBUG 
    pnlDebugIncludes.visible = true 
#else 
    pnlReleaseIncludes.visible = true  
#endif 

応答:あなたがデバッグソリューション構成とライブ展開で一つの他のものを持っている場合

にのみ有効です。 DEBUGシンボルは、デバッグを有効にしている場合にのみ設定されるため、(私のような)ステージング、リリース、およびニッロンシスラップのソリューション構成がある場合は機能しません。回避策は、Webアプリケーションのプロパティページに移動し、[ビルド]タブで、各ビルド構成ごとに条件付きのシンボルを挿入します。 IEでは、リリースする設定をビルドし、そのタブの条件付きシンボルボックスに 'release'を設定します。次に、異なるビルド構成に対して同じ処理を行います。条件付きシンボルボックスはビルド構成に応じて自動的に変更されます。 #if条件付きコンパイル指令は期待どおりに動作します。

Bayardはこれを使用して構成間のマークアップを変更する方法の詳細について質問しました。まあ、は.aspxページ全体をスワップするために使うことができます - home.aspx.releaseとhome.aspx.debugを持っていますが、各ファイルで多くのマークアップを繰り返さなければならないということです。私の解決策は、私のアプリケーションに部分クラスを追加することです。例えば、私の「ViewImage」のページには、その中に次のクラス定義を持っている:私は、同じシグネチャを持ついくつかのクラスファイルを作成し、「ViewImage_titleset.cs.debug」と「ViewImage_titleset.csそれらを命名

public partial class ViewImage : System.Web.UI.Page 

..so 「.staging:

namespace Website 
{ 
    public partial class ViewImage : System.Web.UI.Page 
    { 
     public void SetTitle() 
     { 
      Page.Title = "Running in debug mode"; 
     } 
    } 
} 

とViewImageのためのページロードイベントでのsettitleを..calling

namespace Website 
{ 
    public partial class ViewImage : System.Web.UI.Page 
    { 
     public void SetTitle() 
     { 
      Page.Title = "Running in staging mode"; 
     } 
    } 
} 

は、構成が整っていた建てるかに応じてタイトルを変更します。これはプログラムでページを変更している場合にのみ機能します。

このようなコードを変更するには、上記の条件付きコンパイル方法を使用し、イメージやweb.configsなどの非コードファイルを変更するためのファイルスワップ方法を予約することをお勧めします。パブリッシュ時にデプロイする代替ファイルを設定しないようにしてください。

+1

私は、開発、テスト、および製造のソリューション構成も使用しています。あなたは、各コンフィギュレーションのための条件付きコンパイルシンボルを定義している限り、あなたはこのような何かを行うことができるはず:開発 pnlDevelopmentIncludes.visible =真 #endifの#ifのテスト pnlTestIncludes.visible =真 #の#if endif –

+0

ニールこれは確かに正しいアプローチのように思えます。部分的なクラスを使用して異なるビルド間でマークアップを変更する方法を拡張してください。 –

+0

web.debub.configやweb.release.configのように命名規則を変更することができます。デフォルトでは、IISは.configで終わるファイルを提供しないので、より良いかもしれません。 –

9

私はASP.NET MVCプロジェクトのマスターページでこれを試したところ、うまくいきました。デバッグモードで私がデバッグモードでのjQueryの開発版を使用していない場合ならば、私はjQueryのの縮小さバージョンを使用します。

<head runat="server"> 
<% #if DEBUG %> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.js") %>"></script> 
<% #else %> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.min.js") %>"></script> 
<% #endif %> 
</head> 
+0

エディタで正しく動作しないようです(コードの部分が灰色で表示されているようです)が動作します。 – Will

+1

DEBUGシンボルは、web.configの ' Sprintstar

1

JSファイルに関しては、WebアプリケーションをあらかじめコンパイルするためにWeb Deployment Projectsを使用しています。設定がリリースの場合はビルドが完了した後、JSファイルを縮小し、出力ディレクトリのファイルを置き換えます。これはすべてMSBuildで行われ、beacuse Web Deployment ProjectsはMSBuildファイルです。

関連する問題