2013-02-12 55 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 2013-02-13 00:26:39

+0

這是C#...我正在尋找一個Javascript解決方案... – 2013-02-13 02:23:17

回答

4

Debug.debuggerEnabled告訴你是否連接了調試器。

請注意,這不同於「它被編譯爲調試」 - 因爲JS沒有被編譯,這不是一個真正有意義的指標。

2

鑑於這兩種方法都不是完全可靠的,還有另一種方法可以直接從Visual Studio中獲取構建目標設置,然後使用它來引入調試或發佈文件。

這裏是如何。在項目中創建兩個.js文件(js-buildinfo文件夾中的debug.js和release.js),並確保將它們的Package Action設置爲None而不是Content(右鍵單擊,選擇Properties,你會看到解決方案資源管理器下的操作)。

這裏有基本的文件內容:

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 vs. CurrentAppSimulator,調用WinJS.Log.startLog等。

然後使用MSBuild任務選擇性地將一個或另一個文件複製到包中的公共名稱(例如buildinfo.js)。爲此,有必要在項目文件中添加一個BeforeBuild動作。目前,VS不允許自定義生成配置通過UI JS項目,所以你必須做到以下幾點:

  • 右鍵點擊卸載項目在VS
  • 右鍵單擊並手動編輯項目
  • 讓下面
  • 右鍵點擊刷新項目

改變編輯。jsproj文件我加的ItemGroup在以下項與項目文件:

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

再遠些那裏是一個的註釋節 - 取消註釋,並添加如下所示的元素:

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

理想情況下,您可以在項目中使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文件定義了相同的東西。
  • 鑑於手動步驟,感覺有點脆弱。

但它工作,是最接近我與其他語言的預編譯指令。

相關問題