2014-09-23 13 views
6

Ho appena iniziato la mia lotta per capire owin e katana. Dopo lo Asp.Net tutorial ho creato un progetto vuoto asp.net in VS2013 e aggiunto un riferimento a Nuget Package a Microsoft.Owin.Host.SystemWeb. Il progetto che ho creato è vuoto come mostrato.Che cosa fa un progetto di Visual Studio 2013 come progetto katana?

enter image description here

Questo contiene nulla se non AssemblyInfo.cs, Web.config e packages.config. Ora, quando si esegue (F5) questo, si dice

  • Nessun'assemblea trovato contenente un OwinStartupAttribute.
  • Nessun assembly trovato contenente una classe Startup o [AssemblyName] .Startup. Per disabilitare la scoperta all'avvio OWIN, aggiungi l'appSetting owin: AutomaticAppStartup con un valore di "false" nel tuo web.config. Per specificare l'assembly, la classe o il metodo di avvio OWIN, aggiungere l'app Impostazione owin: AppStartup con la classe di avvio completa o il nome del metodo di configurazione nel proprio web.config.

Ora la domanda è come mai solo con l'aggiunta un riferimento al Nuget Microsoft.Owin.Host.SystemWeb, ha iniziato a cercare qualcosa di specifico per Owin come Startup di classe e così via, come indicato nel messaggio di errore? Voglio dire che ho eseguito un progetto diverso senza il riferimento a Nuget e il messaggio di errore è completamente diverso. Nulla sembra essere cambiato almeno nei due file AssemblyInfo.cs, Web.config aggiungendo il riferimento Nuget. Come ho capito aggiungendo il Nuget aggiunto un file packages.config e aggiunto qualche riferimento al progetto. Inoltre ho confrontato le proprietà del progetto per la scheda due progetti per scheda e non ho trovato alcuna differenza! Quindi mi chiedo che cosa nel mondo sta causando l'avvio di una classe di Startup nel progetto Owin?

+0

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection –

risposta

4

Il segreto è che Katana utilizza una funzionalità ASP.NET denominata PreAppStart. È possibile visualizzare i codici sorgente qui:

https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Host.SystemWeb/PreApplicationStart.cs

Se un assembly in un'applicazione ASP.NET ha questo attributo a livello di montaggio:

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")] 

Poi ASP.NET verrà eseguito automaticamente che il codice come l'app inizia. Questo codice verrà eseguito prima dell'esecuzione del codice "utente", anche prima dell'evento Application_Start. Ecco perché si chiama PreAppStart.

Nel caso di Katana, questo codice registra dinamicamente un modulo HTTP ASP.NET (IHttpModule) che alla fine cercherà e tenterà di chiamare la classe di avvio/builder dell'app. E se fallisce, kablamo!

Per disattivare il comportamento automatico, aggiungere questa riga web.config nella sezione <appSettings>:

<add key="owin:AutomaticAppStartup " value="false" /> 

Ulteriori informazioni su questo comportamento può essere trovata sul sito www.asp.net: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection (uguale il commentatore menzionato).

+0

Ciao Eilon, penso di iniziare a capire.Ma ora la domanda è che cosa sta causando il codice che hai citato (metodo statico nella classe PreApplicationStart) da eseguire. Ancor prima di ciò che cosa sta causando il caricamento di quel gruppo? Come ho detto, ad eccezione dei riferimenti al progetto, non ho fatto nulla al mio progetto. – VivekDev

+0

@DumbDev vedi http://stackoverflow.com/questions/5955866/when-does-preapplicationstartmethod-actually-get-triggered-to-run? –

+0

Grazie Andreas. Ragionevolmente complicato. – VivekDev

Problemi correlati