2013-02-12 31 views
7

ライセンス情報があるため、アプリケーションがデバッグモードまたはプロダクションモードで動作しているかどうかを知る方法を探しています。WinJS:デバッグモードで実行されているか確認してください

アプリがデバッグモードで実行されている場合、私はWindows.ApplicationModel.Store.CurrentAppSimulatorを使用する必要がありそうでない場合、私はそうWindows.ApplicationModel.Store.CurrentApp

を使用する必要がある、私は、関数isDebugの実装を探しています:

var currentAPP; 
if (isDebug()) { 
    currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator; 
} else { 
    currentApp = Windows.ApplicationModel.Store.CurrentApp; 
} 

どれでもトリック?

+0

この情報は役に立ちましたか? http://stackoverflow.com/questions/12693274/windows-8-app-is-debug – siger

+0

これはC#です...私はJavascriptソリューションを探しています... –

答えて

4

Debug.debuggerEnabledは、デバッガが接続されているかどうかを示します。

実際に意味のある指標ではないJSがコンパイルされていないので、これは「デバッグとしてコンパイルされました」とは異なります。

2

これらの方法の両方が完全に信頼できるものではない場合、Visual Studioからビルドターゲットの設定を直接取得し、それを使用してデバッグファイルまたはリリースファイルをインポートする方法があります。

ここで説明します。プロジェクト内に2つの.jsファイル(js-buildinfoフォルダ内のdebug.jsとrelease.js)を作成し、パッケージアクションをコンテンツではなくなしに設定してエンドパッケージから除外してください(右クリック、プロパティの選択、ソリューションエクスプローラーの下にアクションが表示されます)。

debug.jsとするのが最良:

(function() { 
    "use strict"; 

    WinJS.Namespace.define("BuildInfo", { 
     isDebugBuild: true, 
     isReleaseBuild: false, 

     config: "Debug", 
     currentApp: Windows.ApplicationModel.Store.CurrentAppSimulator 

     /* 
      * Include debug-only data, service URIs, access tokens, accounts, etc. 
      */ 
    }); 
})(); 

release.js:ここ

は、基本的なファイルの内容です。

(function() { 
    "use strict"; 

    WinJS.Namespace.define("BuildInfo", { 
     isDebugBuild: false, 
     isReleaseBuild: true, 

     config: "Release", 
     currentApp: Windows.ApplicationModel.Store.CurrentApp 

     /* 
      * Include release-only data, service URIs, access tokens, accounts, etc.   
      */ 
    }); 
})(); 

あなたはその後、BuildInfoを使用すると思います*どこでも、あなたのコード内であなたが必要差別化する。これらのファイルにはビルド固有のものを可能な限りカプセル化します。 CurrentApp対CurrentAppSimulator、WinJS.Log.startLogなどを呼び出します。

次に、MSBuildタスクを使用して、1つまたは他のファイルをパッケージ内の共通名(buildinfo.jsなど)に選択的にコピーします。これを行うには、BeforeBuildアクションをプロジェクトファイルに追加する必要があります。現時点では、VSは、次の操作を実行する必要がありますので、カスタム、UIを通じてJSプロジェクトのためのコンフィギュレーションを構築することはできません:VSで

  • 右クリックし、プロジェクトのアンロード
  • 右プロジェクトをクリックして、手動で編集
  • 右クリックし、リロードプロジェクトの編集

以下の変更を行います。

<Target Name="BeforeBuild"> 
    <Copy SourceFiles="@(BuildFlagSource)" DestinationFiles="@(BuildFlagDestination)" OverwriteReadOnlyFiles="true" SkipUnchangedFiles="true" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    </Target> 
    <PropertyGroup> 
    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> 
    </PropertyGroup> 

: - :私は、プロジェクトファイルでItemGroupの下に次のエントリを追加jsprojファイルあなたはそれをアンコメントし、ここに示されている要素を追加

<ItemGroup> 
    <BuildFlagSource Include="js-buildinfo \$(Configuration).js" /> 
    </ItemGroup> 
    <ItemGroup> 
    <BuildFlagDestination Include="js\buildinfo.js" /> 
    </ItemGroup> 

そして遠くダウンコメントしていますセクションがあります理想的には、buildinfo.jsをプロジェクトで読み取り専用にして、ビルドで上書きされるものを編集しないようにします。

そして、あなたはちょうどどんなHTMLファイルに次の行を持つことができるが必要です(通常BuildInfoのプロパティを使用する他の.jsファイルの前に)それ:

:私はこのソリューションについては好き
<script src="/js/buildinfo.js"></script> 

物事

  • debug.jsファイルと release.jsファイルに必要なものを追加できるので、拡張性があります。
  • BuildInfo名前空間には、ビルド固有の作業を行うためのメソッドが含まれていることがあります。
  • 単純なフラグの場合と同じように、残りのアプリケーション全体に散在させるのではなく、これらのファイル内のすべてのビルド固有のコードを分離することができます。私はまだオプションとしてここにフラグを持っていますが、それをまったく使用する必要はありません。
  • アプリの展開方法に関係なく機能します。
  • x86、x64、およびARM用に作成する必要がある、コンパイル済みのVS拡張機能には依存しません。

いくつかの欠点:

  • プロジェクトを手で編集し、buildinfo.jsを追加し、それが読み取り専用作るようないくつかのワンタイム設定を行う必要があります。
  • debug.jsファイルとrelease.jsファイルが同じものを定義していることを確認する必要があります。
  • 手動の手順では少し壊れています。

しかし、それは動作し、他の言語とのプリコンパイルディレクティブに最も近いです。

関連する問題