2013-02-12 21 views
7

Ho bisogno di questo perché le informazioni sulla licenza, sto cercando un modo per sapere se l'app è in esecuzione in modalità debug o produzione.WinJS: Controlla se è in esecuzione in modalità debug

Se l'applicazione è in esecuzione in modalità di debug, ho bisogno di usare Windows.ApplicationModel.Store.CurrentAppSimulator altrimenti ho bisogno di usare Windows.ApplicationModel.Store.CurrentApp

Quindi, sto cercando un'implementazione della funzione isDebug:

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

Qualsiasi trucchi?

+0

È utile? http://stackoverflow.com/questions/12693274/windows-8-app-is-debug – siger

+0

È C# ... Sto cercando una soluzione Javascript ... –

risposta

4

Debug.debuggerEnabled indica se è collegato un debugger.

Si noti che questo non è lo stesso di "È stato compilato come debug" - dal momento che JS non è compilato non è realmente un indicatore significativo.

2

Dato che entrambi questi metodi non sono completamente affidabili, esiste un altro approccio attraverso il quale si seleziona l'impostazione del target di build direttamente da Visual Studio, e quindi si usa per introdurre un file di debug o di rilascio.

Ecco come. Crea due file .js nel progetto (debug.js e release.js in una cartella js-buildinfo) e assicurati di escluderli dal pacchetto finale impostando la loro Azione pacchetto su Nessuna invece che su Contenuto (fai clic con il pulsante destro del mouse, seleziona Proprietà, e vedrai le azioni sotto Solution Explorer).

Ecco il contenuto dei file di base:

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.   
      */ 
    }); 
})(); 

che si dovrà usare BuildInfo * qualsiasi punto del codice è necessario per differenziare. Meglio ancora, incapsulare cose specifiche della build in questi file il più possibile, ad es. CurrentApp vs. CurrentAppSimulator, chiamate a WinJS.Log.startLog, ecc.

Quindi utilizzare un'attività di MSBuild per copiare selettivamente uno o l'altro file su un nome comune nel pacchetto (ad esempio buildinfo.js). Per fare ciò, è necessario aggiungere un'azione BeforeBuild nel file di progetto. Allo stato attuale, VS non permette di generazione personalizzata di configurazione per i progetti di JS tramite l'interfaccia utente, in modo da avere a che fare la seguente:

  • clic destro e Scarica progetto in VS
  • clic destro e modificare manualmente il progetto
  • Apportare le modifiche sotto
  • clic destro e progetto Reload

modifica della.file di jsproj ho aggiunto le seguenti voci nella ItemGroup con i file di progetto:

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

E poi più giù c'è una sezione che ha commentato - si rimuove il commento e aggiungere l'elemento mostrato qui:

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

Idealmente si dovrebbe fare di buildinfo.js di sola lettura nel progetto per impedire la modifica di ciò che verrà sovrascritto nella compilazione.

E la si può solo avere questa linea in qualsiasi file HTML bisogno (di solito prima di altri file .js che avrebbe utilizzato le proprietà BuildInfo):

<script src="/js/buildinfo.js"></script> 

Le cose che mi piace di questa soluzione:

  • È estensibile in quanto è possibile aggiungere tutto ciò che si desidera ai file debug.js e release.js.
  • Lo spazio dei nomi BuildInfo può includere metodi per eseguire il lavoro specifico della build, che a volte è necessario.
  • Abilita l'isolamento di tutti i codici specifici della build in questi file, piuttosto che sporcarli nel resto dell'app come se fosse con un semplice flag. Ho ancora una bandiera qui come opzione, ma non dovresti usarla affatto.
  • Funziona indipendentemente dall'applicazione di un'app.
  • Non dipende da alcuna estensione VS compilata che dovresti produrre per x86, x64 e ARM.

alcuni aspetti negativi:

  • Avere a portata di mano-modificare un progetto e fare un po 'la configurazione di una volta come l'aggiunta di un buildinfo.js e rendendo di sola lettura.
  • È necessario assicurarsi che i file debug.js e release.js definiscano la stessa roba.
  • Sembra un po 'fragile, data la procedura manuale.

Ma funziona ed è il più vicino possibile alla direttiva di precompilazione con altre lingue.

Problemi correlati