2015-04-24 5 views
9

Ich bin Teil eines Teams, das an einer großen Anwendung arbeitet. Ich bin neu in diesem Team und baue ein neues Stück der App. Als Teil dieses Prozesses habe ich eine WebApi-Anwendung erstellt, die einige HTTP-Endpunkte verfügbar macht, über die ich Informationen über die App abrufen kann.Build-Ausgabeverzeichnis der WebApi-Anwendung ändern

Aufgrund der Bedingungen würde es viel zu lange dauern, um zu erklären, möchte ich das WebApi-Projekt in einem anderen Verzeichnis, speziell ..\bin\Server\Debug\ bauen, da dies die meisten anderen Teile der App zu bauen ist. Ich würde mich nicht darum kümmern, dass die App versucht hat, Dateien zu verwenden, die auf der Basis des Arbeitsverzeichnisses gefunden werden, das momentan für meine WebApi-App falsch ist.

versuchte ich es in den Projekteinstellungen zu ändern und jetzt bekomme ich diesen Fehler: Could not load type WebApiApplication

Mein googeln bisher wenig Hilfe hat aufgedreht. Wer weiß, wie man das löst?

+0

Ich habe das gleiche Problem zu verwalten. Hat jemand eine Idee, wie man das debuggt? Warum ist eine 'WebApiApplication' erforderlich, um ein Ausgabeverzeichnis von' bin \ 'zu erstellen? – Brett

+0

Das mag eine dichte Frage sein, aber haben Sie Ihre gesamte Lösung neu erstellt? Haben Sie Baugruppen manuell von anderen Orten in den Papierkorb kopiert? –

+0

@ Irb Ja, ich habe die Lösung neu aufgebaut. Und nein, ich habe keine Assemblys von anderen Orten in den Container kopiert. – Brett

Antwort

5

Versuchen Sie, eine Laufzeit probing Pfad in der Konfiguration hinzufügen:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin\server\Debug;"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Neben obigen Schritt und von globa.asax Fehler loszuwerden. Öffnen Sie die Markierung der Datei Global.asax und fügen Sie die folgende Zeile hinzu.

<%@ Assembly Name="<you_web_app_assembly_name_here>" %> 

Jetzt beginnen Sie den Fehler von System.web oder BindingProvider nicht usw. Es gibt für sie unter compilation Hinzufügen von Baugruppen Montage Starttag seltsam fix gefunden zu bekommen.

<compilation debug="true" targetFramework="4.5" optimizeCompilations="false"> 
     <assemblies> 
     <add assembly="Microsoft.AspNet.Identity.Core, Version=2.2.1, PublicKeyToken=31bf3856ad364e35" /> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     </assemblies> 
</compilation> 

Sie werden einige weitere Fehler wie diese bekommen, aber das wird Sie in Fahrt bringen.

Grund: Das Problem, das ich sehe, ist, dass es eine Option gibt, den Ausgabepfad zu ändern, aber Asp.net macht im laufenden Kompilierung. Welcher Fehler ist kompiliert, wenn Sie versuchen, die Website zu starten. Irgendwo die run time compilation nur in \bin Ordner suchen und deshalb müssen wir jede Assembly angeben, auf die das Projekt verweist.

Update - Leider können Sie das Verzeichnis bin nicht ändern. Nach dem Betrachten aller Optionen und Graben gefunden, dass bin Ordner von Asp.net Web-Projekt ist keine gewöhnliche binäre Ausgabe Ordner. Es ist ein share code folder von dem die Binärdateien direkt im Projekt referenziert werden.

The binaries are compiled when a first request is received by webserver for Asp.net application. And bin folder is only use as shared binary references folder and not the actual output folder/directory. The actual output folder of On-the-fly compilation in Asp.net is default set to %SystemRoot%\Microsoft.NET\Framework\<versionNumber>\Temporary ASP.NET Files that you can change ofcourse from compilation tag attribute [tempDirectory][3] in your web.config .

Nach all diesen Forschungen kam ich zu dem Schluss, dass die Möglichkeit, das Verzeichnis von project -> properties -> Build -> Bin zur Änderung wegen Asp.net Website Projekt Vorlage erscheint. Dies gibt dem Benutzer das gleiche Aussehen wie bei jedem anderen Projekt. Aber die Funktionalität der asp.net Website bleibt gleich. Der Bin Ordner funktioniert immer noch so, wie er in der alten website Vorlage von Asp.net verwendet wurde.

+0

Müsste ich das manuell in 'bin \ server \ Release' ändern, um im' Release'-Modus zu laufen? – Brett

+0

können Sie die Transformationsfunktion verwenden, um manuelle Änderungen für die Veröffentlichung zu vermeiden. Unter web.config gäbe es web.debug.config und web.release.config. Setzen Sie "bin \ server \ Debug;" in debug und "bin \ server \ Release;" in der Release-Konfigurationsdatei. – vendettamit

+0

Ich habe es versucht und sehe immer noch den gleichen Fehler. Ich stellte sicher, dass mein "Ausgabepfad" auf "bin \ server \ Debug" gesetzt wurde, und fügte dann den obigen Code zu "web.debug.config" hinzu (und die entsprechende Änderung für die Veröffentlichung). – Brett

0

Sie können versuchen, die DLL mit dem Afterbuild-Ziel zu kopieren. Ändern Sie zuerst den Ausgabepfad zurück zu dem, was er war, wenn Sie ihn zuvor geändert haben. Fügen Sie dann in Ihrer Projektdatei einen Code wie diesen hinzu.

<target name="AfterBuild">  
<copy destinationfolder="..\bin\Server\Debug\" overwritereadonlyfiles="true" sourcefiles="$(OutputPath)\$(AssemblyName).dll" /> 
<copy destinationfolder="..\bin\Server\Debug\" overwritereadonlyfiles="true" sourcefiles="$(OutputPath)\$(AssemblyName).pdb" />  
<copy destinationfolder="..\bin\Server\Debug\" overwritereadonlyfiles="true" sourcefiles="$(OutputPath)\$(AssemblyName).xml" /> 
</target> 

Dies wird die integrierte DLL in den Ordner in Zielordner gesetzt.Normalerweise benutze ich das für Klassenbibliotheken, aber ich sehe nicht, warum es nicht für ein Web-API-Projekt funktionieren würde.

Sie können meinen Blog-Post auf diesem wenn Sie mögen.

http://torontoprogrammers.blogspot.com/2014/11/msbuild-targets-and-tasks.html

0

Sie können das Ausgabeverzeichnis einer asp.net Anwendung ändern aufgrund IIS Sicherheitseinschränkungen, das ist, warum es nicht funktioniert.

Wenn Sie versuchen, dlls aufgrund DI, kopieren Sie alle anderen Satelliten-DLLs in Binärordner Ihrer wichtigsten asp.net app