2016-05-28 3 views
6

Учитывая раствор, содержащий два сайта:.NET Core RC2 applicationhost.config несовместим с ASP.NET .NET 4.6?

1) ASP.NET на основе .NET 4,61

2) .NET Core, RC2

После запуска iisexpress для (2), МСВС обновляет applicationhost. config, чтобы содержать несколько дополнительных строк, которые кажутся несовместимыми с (1). Это не замечается до тех пор, пока iisexpress не отключится, а затем попытается запустить (1).

Несовместимые линии:

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

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

<add name="AspNetCoreModule" /> 

При запуске (1), появится диалоговое окно с указанием "IISExpress не удалось запустить" и событие написано:

В Модуль DLL «C: \ Program Files (x86) \ Microsoft Web Tools \ AspNetCoreModule \ aspnetcore.dll не удалось загрузить из-за проблемы с конфигурацией. Текущая конфигурация поддерживает загрузку изображений, созданных для архитектуры процессора AMD64. Поле данных содержит номер ошибки. Чтобы узнать больше об этой проблеме, в том числе о том, как устранить эту ошибку несоответствия архитектуры процессора, см. http://go.microsoft.com/fwlink/?LinkId=29349.

Возможные решения?

A) Удалены лишние строки перед запуском (1), как добиться этого автоматически?

B) Используйте другой applicationhost.config для каждого веб-сайта, есть ли переменная окружения, чтобы установить это?

C) Непосредственно устраните проблему, указанную в журнале событий. Как-то это работает при запуске сайта .NET Core RC2, так что это странно.

D) Используйте отдельные файлы решений, которые находятся в разных каталогах. Это нежелательно, так как это довольно сложное решение.

+0

Возможное решение - вручную отредактировать applicationHost.config вручную, чтобы два веб-приложения выполнялись в разных пулах приложений (приложение .NET 4.6.1 в пуле с CLR 4 и ядром ASP.NET Core в пуле без CLR) и с отдельной конфигурацией модуля для загрузки этого модуля ASP.NET Core только в приложении ASP.NET Core. –

+0

@LexLi, я попробовал что-то похожее на ваш совет, переместив третий из раздела по умолчанию Location = "" в конкретное местоположение основной сети и смог запустить оба сайта. Но если я перестрою и запустил основной сайт, MSVS снова добавит строку в область Location = "". Я предполагаю, что если переписывание MSVS произойдет, если я выйду в отдельные пулы приложений, исправьте? Поскольку MSVS записывает раздел глобальных модулей. – crokusek

+0

Есть также эти «preConditions» в некоторых линиях dll. Я попробовал добавить bitness64 к тому, на что он жаловался, но он сделал ошибку. – crokusek

ответ

8

Аналогичная проблема возникнет, если вы создадите решение со смешанными .NET Core RC2 и ASP.NET < 5 проектами, а затем обновите до .NET Core 1.0. Проекты ASP.NET больше не будут выполняться.

Чтобы исправить, удалите .vs \ config \ applicationhost.config и выгрузите и перезагрузите проект/решение, чтобы заставить VS правильно его восстановить. NET Core 1.0, тогда будет запущен любой старый материал .NET.

Я также выяснил, что Event Viewer регистрирует точную командную строку, с которой запускается IIS Express, когда вы пытаетесь запустить ее в VS, поэтому вы можете ее захватить и вставить в командную строку, чтобы получить вывод ошибок из IIS Express, особенно полезно, если в средстве просмотра событий нет самих ошибок.

+0

Да это! Файл applicationhost.config в папке .vs не находится в папке Documents \ IISExpress. Наконец после 2-х дней головокружения. Большое спасибо! –

+0

У меня была эта проблема, а также после того, как я ездил на американских горках .NET Core с момента предварительного просмотра 6. Оказывается, совместное размещение этих файлов в одном и том же решении было плохой идеей по многим причинам ... извлеченный урок. – OperatorOverload

2

Вот что получилось, - по линии предложения (В):

1) к надстройке тега, указанного в «образ», добавьте

preCondition="bitness32" 

2) Добавить блок определения местоположения, если один уже не существует, укажите удалить:

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

не знаю, почему это работает, потому что bitness32 кажется назад ко мне (потому что исходное сообщение об ошибке сказал, что это amd64).

Теперь оба сайта могут запускаться одновременно, и MSVS не отменяет эти ручные изменения.

Использование на свой страх и риск! Надеемся на лучший ответ или улучшение в следующем выпуске.

0

Это должно быть исправлено в последней технологической оснастки (VS 2015 Update 3 и DotNetCore.1.0.0-VS2015Tools.Preview2) https://www.microsoft.com/net/core#windows

AspNetCoreModule теперь имеет правильную программу установки для IIS Express (входит в комплект нового инструмента).

+1

Нет, еще проблема для меня. – user169771

+1

Похоже, что IIS Express по-прежнему пытается загрузить модуль RC2 даже после его удаления. Сам файл больше не существует. – user169771

+1

Я понял. Удалите <РЕШЕНИЕ DIR> \. Vs \ config \ applicationhost.config и выгрузите и перезагрузите проект/решение, чтобы заставить VS правильно его восстановить. NET Core 1.0, тогда будет запущен любой старый материал .NET. – user169771

 Смежные вопросы

  • Нет связанных вопросов^_^