Я пытаюсь использовать SpecsFor MVC для автоматического приемочного тестирования, и я заметил, что он неправильно строится/публикует проект на Visual Studio 2012 и, следовательно, IIS Express не работает, оканчиваясь на сообщение "Страница не может быть отображено" во время автоматического принятия test.
Чтобы провести все мои тесты, чтобы получить эту работу, изначально при попытке запуска автоматизированных тестов я получал сообщение "Сборка с ошибкой" при запуске
_host = new SpecsForIntegrationHost(config);
_host.Start();
После загрузки исходного кода SpecsFor MVC я заметил, что ошибка произошла из-за MSBuild.exe
процесса MSBuild.exe
и выходное сообщение записывалось в Console.Output
. После проверки вывода я заметил, что ошибка заключалась в том, что Microsoft.WebApplication.targets
не найден. После некоторых исследований я нашел следующее:
<PropertyGroup>
из .csproj
который после его удаления, MSBuild.exe
не выходил с кодом ошибки, поскольку он имел только предупреждения, которые все еще приводили к тому, что проект не строился и не издавался правильно, SpecsFor MVC в этом случае рассматривал этот сценарий как успешный и приступил к запуску IIS Express, но поскольку проект не был успешно выполнен, приемочные тесты привели к тому, что другое сообщение " Page Cannot Be Displayed
поскольку IIS Express работал неправильно.C:\Program Files (x86)\MSBuild\12.0\Bin
. IISTestRunnerAction.PublishSite()
путь к MSBuild.exe
загружается через System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
который в моем случае выводит C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
. Изменение этого вручную в C:\Program Files (x86)\MSBuild\12.0\Bin
решило проблему, и проект был успешно создан и опубликован. Мой последний вопрос: есть ли способ изменить значение System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
чтобы мне не нужно было обновлять источник проекта SpecsFor MVC?
Заранее благодарю за любую помощь!
Начиная с SpecsFor.Mvc 3.2.0-rc01 (по-прежнему является предварительным выпуском на данный момент), вы можете настроить путь к MSBuild следующим образом:
var config = new SpecsForMvcConfig();
config.UseIISExpress()
.With(Project.Named("SpecsFor.Mvc.Demo"))
.CleanupPublishedFiles()
//Set the full path to MSBuild.exe here!
.UseMSBuildExecutableAt(@"C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe")
.ApplyWebConfigTransformForConfig("Test");
Чтобы понять, как эти ".targets" файлы организованы в Visual Studio, проблема. Я ничего не знаю об этом SpecsFor MVC работает, но если вы поместите в него правильный файл ".targets", он должен работать. По вашему вопросу, я понимаю, что SpecsFor вызывает MSBuild внутренне.
Аналогичная проблема возникает при установке новой машины сборки, и многие компоненты Visual Studio отсутствуют. Не все из них развернуты вместе с каркасом. Некоторые из них поставляются с отдельными установщиками Visual Studio, другими с конкретными компонентами.
Я не нашел конкретного установщика, который развертывает этот необходимый файл. Я просто нашел установщик MSBuild 2012 (http://www.microsoft.com/en-us/download/details.aspx?id=40760), и я не знаю, развертывает ли он предыдущую версию.targets.
А также вы можете попробовать установить ASP.NET MVC для вашей конкретной версии.
Другой подход - попытаться найти параметр в SpecsFor, чтобы посмотреть, какую версию MSBuild он вызывает. Возможно, если он использует версию в Program Files\v12, она должна работать.
C:\Program Files (x86)\MSBuild\12.0\Bin
, он работает нормально. Но он читает путь MSBuild через System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
который в моем случае возвращает C:\Windows\Microsoft.NET\Framework64\v4.0.30319` which when executed outputs the
.targets ошибка