2015-05-05 24 views
10

Quando TeamCity viene eseguito un test di integrazione che inizia una webapplication self-hosted, il test ha esito negativo con l'errore:"System.MissingMemberException: La fabbrica server non ha potuto essere situato" Avvio Microsoft.Owin self-hosted in TeamCity

System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener 

il codice di gettare questo errore è:

var webApp = WebApp.Start<Startup>("http://*:52203/") 

il test funziona benissimo quando eseguito withing Visual Studio (utilizzando il test corridore ReSharper). Teamcity è configurato per utilizzare l'eseguibile JetBrains.BuildServer.NUnitLauncher.exe per eseguire il test.

Vedo che molti post relativi a questo errore riguardano il perché lo Microsoft.Owin.Host.HttpListener.dll non è presente nella cartella bin \ debug o bin \ release. Posso confermare che questo file (e il relativo file .xml) sono entrambi presenti nella cartella di rilascio bin \ utilizzata dal buildAgent di TeamCity. Non è presente alcuna cartella bin/debug.

+0

Ho riscontrato lo stesso errore di Team City e posso confermare lo stesso di quello relativo alla presenza delle DLL nella cartella bin \ release accanto all'assembly in fase di test. Tuttavia, anche il mio fallisce costantemente all'interno del runner di prova di Resharper. Pubblicheremo una risposta se imparo di più. –

risposta

10

Stavo riscontrando lo stesso problema: Viene eseguito correttamente localmente, ma non riesce sull'agente TeamCity.

Il mio progetto di test ha avuto un punto di riferimento, tramite NuGet, a Microsoft.Owin.Host.HttpListener

Quello che ha funzionato per me stava caricando in modo esplicito la dll Microsoft.Owin.Host.HttpListener prima di avviare l'applicazione web.

// load assembly 
AppDomain.CurrentDomain.Load(typeof(Microsoft.Owin.Host.HttpListener.OwinHttpListener).Assembly.GetName()); 
+0

Grazie per il suggerimento, ma purtroppo aggiungendo quella linea non ha fatto differenza. L'ho aggiunto direttamente prima della chiamata al metodo WebApp.Start(). Ancora getta la stessa eccezione sulla chiamata al metodo WebApp.Start(), quindi ha felicemente chiamato il metodo Load() senza problemi –

+0

Posso confermare che ho il pacchetto nuget Microsoft.Owin.Host.HttpListener, versione 3.0.1 , installato sia nel progetto Test che nel progetto webapi –

+0

Ho installato Microsoft.Owin.Host.HttpListener pacchetto nuget e l'errore persiste – Waqas

12

ho incontrato questo nel mio script PowerShell che scorre tutte le nostre soluzioni e li costruisce con MSBuild e poi invoca MSTest su tutti i progetti di prova. Questo script viene utilizzato per creare il test & localmente prima di eseguire il commit su TFS. Questo problema non si verifica durante l'esecuzione dei test all'interno di VS. Credo che questo sia correlato a this question.

Inserire quanto segue prima di chiamare WebApp.Start ("http: // *: 52203 /") nell'inizializzazione del test.

// This uber silly code is needed to ensure the Owin HttpListener assembly 
// is properly copied to the output directory by using it, utterly redonkulous. 
var uberSillyNecessity = typeof(OwinHttpListener); 
if (uberSillyNecessity != null) { } 
+0

@SimonGreen questa risposta lo ha risolto per io - Ho avuto lo stesso problema, i test funzionavano bene in VS ma fallendo nei test CI Teamcity. L'aggiunta di queste righe prima della chiamata 'WebApp.Start' ha funzionato perfettamente - varrebbe la pena accettarlo per consentire ad altre persone di trovarlo. –