2016-05-28 14 views
6

eine Lösung mit zwei Websites Gegeben:.NET Core RC2 applicationhost.config nicht mit ASP.NET .NET 4.6 kompatibel?

1) ASP.NET basiert auf .NET 4.61

2) .NET Core-RC2

Nach dem Start iisexpress für (2), MSVS aktualisiert die applicationhost. config enthält einige zusätzliche Zeilen, die mit (1) nicht kompatibel zu sein scheinen. Dies wird nicht bemerkt, bis iisexpress das erste Mal herunterfährt und dann versucht, es zu starten (1).

Die inkompatiblen Linien sind:

<section name="aspNetCore" overrideModeDefault="Allow" /> 

<add name="AspNetCoreModule" image="C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll" /> 

<add name="AspNetCoreModule" /> 

Wenn (1) gestartet ist, erscheint ein Dialog, die besagt, und geschrieben wird ein Ereignis "IISExpress starten fehlgeschlagen":

Das Modul DLL ‚C: \ Programme (X 86) \ Microsoft Webtools \ AspNetCoreModule \ aspnetcore.dll konnte aufgrund eines Konfigurationsproblems nicht geladen werden. Die aktuelle Konfiguration unterstützt nur das Laden von Bildern, die für eine AMD64-Prozessorarchitektur erstellt wurden. Das Datenfeld enthält die Fehlernummer. Weitere Informationen zu diesem Problem, einschließlich zur Behebung dieses Typs von Fehlern bei der Prozessorarchitektur, finden Sie unter http://go.microsoft.com/fwlink/?LinkId=29349.

Mögliche Lösungen?

A) Die zusätzlichen Zeilen vor dem Start entfernt (1), wie erreicht man das automatisch?

B) Verwenden Sie eine andere applicationhost.config für jede Website, gibt es eine Umgebungsvariable, um dies zu setzen?

C) Das im Ereignisprotokoll gemeldete Problem direkt beheben. Irgendwie funktioniert es, wenn die .NET Core RC2-Site gestartet wird, das ist seltsam.

D) Verwenden Sie separate Lösungsdateien, die sich in verschiedenen Verzeichnissen befinden. Dies ist nicht wünschenswert, da es eine ziemlich komplexe Lösung ist.

+0

Eine mögliche Lösung besteht darin, applicationHost.config manuell zu bearbeiten, sodass die beiden Webanwendungen in verschiedenen Anwendungspools ausgeführt werden (.NET 4.6.1-Anwendung in einem Pool mit CLR 4 und ASP.NET Core in einem Pool ohne CLR) und mit separater Modulkonfiguration, um dieses ASP.NET Core-Modul nur in der ASP.NET Core App zu laden. –

+0

@LexLi, ich habe versucht, etwas Ähnliches zu Ihrem Ratschlag zu machen, indem ich den 3. vom Default-Bereich Location = "" auf die spezifische Position des Kernnetzes verschoben habe und beide Seiten laufen lassen konnte. Aber wenn ich die Core-Site neu anlege und starte, fügt MSVS die Zeile wieder dem Bereich Location = "" hinzu. Ich nehme an, wenn das MSVS neu geschrieben würde, wenn ich auch in separate App-Pools ausbrechen würde, richtig? Weil MSVS den globalen Modulabschnitt schreibt. – crokusek

+0

Es gibt auch diese "preConditions" in einigen der DLL-Zeilen. Ich habe versucht, Bitness64 zu dem zu addieren, über den sie sich beschweren, aber es warf einen Fehler auf. – crokusek

Antwort

8

Ein ähnliches Problem tritt auf, wenn Sie eine Lösung mit gemischten .NET Core RC2- und ASP.NET < 5-Projekten erstellen und dann auf .NET Core 1.0 aktualisieren. Die ASP.NET-Projekte werden nicht mehr ausgeführt.

Um zu beheben, löschen Sie .vs \ config \ applicationhost.config, entladen Sie das Projekt/die Lösung und laden Sie es neu, um VS zu erzwingen, damit es ordnungsgemäß mit regeneriert wird. NET Core 1.0 Einstellungen, dann werden alle älteren .NET Sachen ausgeführt.

Ich habe auch herausgefunden, Event Viewer protokolliert die genaue Befehlszeile, mit der IIS Express ausgeführt wird, wenn Sie versuchen, es in VS auszuführen, so können Sie es greifen und in einer Eingabeaufforderung, um Fehlerausgabe von IIS Express zu erhalten besonders nützlich, wenn in der Ereignisanzeige selbst keine Fehler vorhanden sind.

+0

Ja das! Die Datei "applicationhost.config" im Ordner ".vs" nicht im Ordner "Documents \ IISExpress". Endlich nach 2 Tagen Kopfknallen. Vielen Dank! –

+0

Ich hatte dieses Problem auch, nachdem ich die .NET Core Achterbahn seit Vorschau 6 geritten hatte. Es stellte sich heraus, dass die gemeinsame Lokalisierung in der gleichen Lösung aus vielen Gründen eine schlechte Idee war ... Lektion gelernt. – OperatorOverload

2

Hier ist, was funktioniert hat - nach dem Vorbild des Vorschlags (B):

1) Um den Add-Tag, das die "Bild" angegeben, hinzufügen

preCondition="bitness32" 

2 hinzufügen) einen Standort blockieren, wenn einer noch nicht vorhanden ist, geben sie entfernen:

<location path="Your_NonCore_SiteName"> 
    <system.webServer> 
     <modules> 
     <remove name="AspNetCoreModule" /> 
     </modules> 
    </system.webServer> 
    </location> 

nicht sicher, warum dies funktioniert, weil bitness32 mir scheint nach hinten (weil die ursprüngliche Fehlermeldung sagte, es sei amd64).

Jetzt können beide Websites gleichzeitig gestartet werden, und MSVS überschreibt diese manuellen Bearbeitungen nicht.

Verwendung auf eigene Gefahr! Hoffe auf eine bessere Antwort oder Verbesserung mit der nächsten Version.

0

Dies sollte durch die neuesten Werkzeuge (VS 2015 Update 3 und DotNetCore.1.0.0-VS2015Tools.Preview2) https://www.microsoft.com/net/core#windows

AspNetCoreModule hat jetzt ein richtiges Installationsprogramm für IIS Express (enthielt in dem neuen Tooling) fixiert werden.

+1

Nein, immer noch ein Problem für mich. – user169771

+1

Offenbar versucht IIS Express das RC2-Modul auch nach der Deinstallation noch zu laden. Die Datei selbst ist nicht mehr da. – user169771

+1

Ich habe es herausgefunden. Löschen Sie \. Vs \ config \ applicationhost.config, und entladen Sie das Projekt/die Projektmappe, um VS zu erzwingen, damit es ordnungsgemäß neu generiert werden kann. NET Core 1.0 Einstellungen, dann werden alle älteren .NET Sachen ausgeführt. – user169771

Verwandte Themen