2016-02-04 2 views
2

У меня были проблемы с IIS Express в течение последних нескольких лет с тех пор, как мы перестали использовать обычные IIS в наших проектах. Обычно у нас есть решения, в которых есть веб-служба и какой-то клиент (веб-сайт, рабочий стол или и то и другое). Когда я запускаю клиента около 1 раза в 10 раз, я получаю сообщение об ошибке: не обнаруживать localhost: blahblah или не удается загрузить сборку. Полная перестройка всегда устраняет эту проблему. ОДНАКО, это то, о чем я говорил в VS2013 и VS2015 вместе с моими коллегами. Я придумал обходной путь, в котором я добавил событие Pre-build, чтобы удалить папку bin в веб-службе и сделать и msbuild на нем. Это отлично работает на моей машине. Тем не менее, я не знаю, как написать его там, где он работает на нашем сервере сборки или на компьютерах других народов. События Pre-build проверяются в исходное управление как часть файла cs.proj, поэтому мне нужно общее решение, если я иду по этому маршруту. Вот мой сценарий предварительной сборки:Исключительные ошибки Visual Studio/IIS Express

DEL /Q "C:\TFS\Enterprise Data Management\Vendor\Dev-Phase2US\WcfService\bin\*.*" 
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "C:\TFS\Enterprise Data Management\Vendor\Dev-Phase2US\WcfService\WcfService.csproj" 

У кого-нибудь еще были подобные проблемы? Любые хорошие решения или обходные пути?

+1

Задайте переменную окружения на каждой машине разработчиков и используйте переменную в ваших проверенных файлах. Затем каждая машина может установить ее на другое значение, основанное на предпочтении разработчика. –

+0

@LexLi Это хорошее предложение. Я думала об этом. Один из недостатков этого заключается в том, что мы стараемся иметь все в управлении источником. Поэтому любой разработчик может вывести код и запустить его без какой-либо настройки среды. Кроме того, я не думаю, что это полет с нашим администратором сервера сборки. Однако, без моих организационных ограничений, это отличная идея. –

+0

Итак, чтобы правильно понять исправление: вы хотите запустить эту команду PreBuild на каждой машине разработчика, но вам нужно знать ее путь к C: \ TFS \ .. \ Dev-Phase2US \ WcfService? – makhdumi

ответ

4

В ответ на вопрос, который просил, чтобы использовать «общий» путь, используйте «Макросы» предлагается в Visual Studio (технически, Свойства MSBuild). Если предположить, что папка WcfService находится в том же растворе,

DEL /Q "$(SolutionDir)\WcfService\bin\*.*" 

Или, если это в какой-то путь относительно проекта,

DEL /Q "$(ProjectDir)..\..\..\WcfService\bin\*.*" 

Обратите внимание, что с помощью Pre-Build события для этого довольно плохая практика, хотя. Лучше использовать задачу «Очистить» в проекте, например. , добавив в ваш .csproj (под корневым элементом, например, перед </Project>):

<Target Name="CleanWcfProject" BeforeTargets="PrepareForBuild"> 
    <MSBuild Projects="$(SolutionDir)\WcfService\WcfService.csproj" Targets="Clean" Properties="Configuration=$(Configuration);Platform=$(Platform)" /> 
    </Target> 

Я не уверен, почему вы используете MSBuild на проекте WcfService.csproj либо, так как вы можете просто добавить его в качестве ссылки на проект (щелкните правой кнопкой мыши> Добавить ссылку> Решение), что приведет к тому, что MSBuild автоматически построит проект, увидев, что его выходы очищены.

Если зависимый проект находится в другом решении

Если это так, то Чистым должен работать с относительным путем, но с добавлением ProjectReference не может быть желательным/возможно (вы можете добавить зависит от вашего решения, даже если оно находится в другом решении, но часто это невозможно/возможно из-за множества других зависимостей).

Если это так, то просто добавьте цель сборки, а также,

<Target Name="CleanWcfProject" BeforeTargets="PrepareForBuild"> 
    <MSBuild Projects="$(ProjectDir)..\..\..\WcfService\WcfService.csproj" Targets="Clean;Build" Properties="Configuration=$(Configuration);Platform=$(Platform)" /> 

    </Target> 
+0

Я согласен с тем, что событие предварительной сборки не является идеальным. Решение для кода настроено на создание проекта WcfService, но «умная» сборка, которая возникает при запуске клиента, не всегда является фокусом. Именно поэтому я вручную написал событие pre-build для создания «Чистоты» и сборки. Общий путь и чистая задача в вашем сообщении очень полезны. Я вообще этого не знал. Я нашел статью msdn, чтобы помочь мне с деталями. https://msdn.microsoft.com/en-us/library/ms366724.aspx Это похоже на правильное решение. Спасибо! –

1

Можете ли вы попробовать альтернативные настройки для своего проекта. Щелкните правой кнопкой мыши на своем веб-проекте. Выберите «Свойства» и затем выберите вкладку «Веб». Настройте свою Visual Studio, как показано ниже.

enter image description here

Также Щелкните правой кнопкой мыши на проекте и выберите Установить в качестве Start Up Project, как показано ниже enter image description here

Затем, наконец, кликните правой кнопкой мыши на домашней странице, например, или страницу, которую вы хотите запустить сначала, например. index.html, и указан в качестве начальной страницы, как показано ниже

enter image description here

+0

Спасибо за ввод. Большинство наших приложений для веб-клиентов настроены таким образом. Они всегда срабатывают нормально. Это бэкэнд-веб-сервис, который клиент связывает в решении, что является проблемой. Клиент может быть чем угодно: от приложения WPF до консольного приложения с веб-клиентом. –

1

Если у вас есть как приложение консоли и веб-приложения в том же растворе, пожалуйста, попробуйте это, право на решение. Выберите свойства и установите Запускают в несколько разных проектах запуска, как показано ниже

enter image description here

+0

Спасибо за хороший снимок экрана. Я попробую это. –

+0

Кажется, что одновременно запускается несколько клиентов. Проблема заключается в том, что бэкэнд-сервис не запускает свойство в IIS Express. –

+0

Если IIS Express не запускается, и вы пробовали все остальное, я бы рекомендовал удалить и снова установить визуальную студию. IIS Express построен в Visual Studio.Таким образом, вы получаете конфигурацию по умолчанию из коробки, и теоретически нужно быть в порядке –

3

Большое спасибо Аль-Muhandis для получения меня на верном пути для этого. Таким образом, перестройка проекта WCF-сервиса устраняет мою проблему в 100% случаев. Событие предварительной сборки в моем первоначальном вопросе было очень хакерским способом сделать это. Простой Чистый недостаточно, так как я получаю эту ошибку только с помощью «Чистота»:

Запрошенная служба 'http://localhost:53934/EdmVendService/EdmVendor.svc' не может быть активирована. Дополнительные сведения см. В журналах диагностики трассировки сервера.

Моим окончательным решением было добавить этот блок XML в файл csproj. Я просто использовал блокнот для его редактирования.

<Target Name="RebuildWcfProject" BeforeTargets="PrepareForBuild"> 
    <MSBuild Projects="$(SolutionDir)\WcfService\WcfService.csproj" Targets="Rebuild" Properties="Configuration=$(Configuration);Platform=$(Platform)" /> 
</Target> 

Вот дно файла csproj после моего изменения.

enter image description here

Надеется, что это может быть полезным для кого-то других.

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