2017-03-09 5 views
1

Ich benutze die Nancy-Self-Hosting-Funktion, um einige Unit-Tests zu tun. Aus meinem Unit-Tests Projekt (getrennt vom nancy API-Projekt), verwende ich den folgenden Code eine Instanz meiner API zu erstellen:. NET Nancy Selbsthost-Konfigurationsdateien fehlen

var myApp = new NancyHost(new Uri(MockRestApiUrl), new Bootstrapper(), new HostConfiguration() { UrlReservations = new UrlReservations { CreateAutomatically = true } }); 

Im Bootstrapper habe ich einige Codes, der für eine Reihe von Konfigurationsdateien sieht Vorspeichern in den Speicher. Beachten Sie, dass dies keine statischen Dateien sind, die bereitgestellt werden, sondern Dateien, die die Konfiguration der API steuern.

Das Problem, das ich habe, ist, dass der Bootstrapper eine Ausnahme generiert, weil es die gesuchten Konfigurationsdateien nicht finden kann. Ich habe die Config-Datei Pfad über RootPathProvider.GetRootPath() und erhalten:

C: ... \ AppData \ Local \ Temp \ b3f2483d-8c40-45d8-8ba3-dd8db2b9bfd3 \ b3f2483d-8c40-45d8-8ba3-dd8db2b9bfd3 \ assembly \ dl3 \ bf80d16d \ b3b00d8e_bd91d201 \ Mapping \ PropertyMapping.json

Wenn ich mir den Ordner anschaue, fehlen der Mapping-Ordner und die Konfigurationsdatei. Ich habe versucht, diese als "Inhalt" und "Immer kopieren" in Visual Studio zu markieren und habe meine Lösung mehrmals gereinigt, aber kein Glück. Wie bekomme ich diese Dateien auf die selbst gehostete Website kopiert?

Antwort

0

Ich habe immer noch keine Ahnung, warum der injizierte Pfadanbieter in meinem Modul mir einen '... AppData ...' Pfad gab. Allerdings habe ich um ihn herum erhalten wie folgt:

public class SelfHostRootPathProvider : IRootPathProvider 
{ 
    public string GetRootPath() 
    { 
     return AppDomain.CurrentDomain.BaseDirectory; 
    } 
} 

Und auf einer Klasse abgeleitet von meiner App Bootstrapper:

public class IntegrationBootstrapper : Bootstrapper 
{ 
    protected override IRootPathProvider RootPathProvider 
    { 
     get { return new SelfHostRootPathProvider(); } 
    } 
} 

Und wenn Sie die Instanziierung:

 var myApp = new NancyHost(new Uri(ServiceUrl), new IntegrationBootstrapper(), new HostConfiguration() { UrlReservations = new UrlReservations { CreateAutomatically = true } }); 

Das Entschlüssen der Pfad zum Debug-Ordner meines Unit-Test-Projekts. Ich musste dann sicherstellen, dass alle Konfigurationsdateien mit meinem Komponententest-Projekt verknüpft wurden (Hinzufügen -> Vorhandenes Objekt -> Als Verknüpfung hinzufügen) und in beiden Projekten als Inhalt/Immer in Visual Studio kopieren festgelegt wurde.