SpecsFor MVC / MSBuild.exe неправильно строит / публикует проект в Visual Studio 2012

1

Я пытаюсь использовать 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 не найден. После некоторых исследований я нашел следующее:

  • Внешняя ошибка сборки VS2013 "ошибка MSB4019: импортированный проект <путь> не найден"
    • Тот, у кого больше всего голосов, говорил об удалении узла <PropertyGroup> из .csproj который после его удаления, MSBuild.exe не выходил с кодом ошибки, поскольку он имел только предупреждения, которые все еще приводили к тому, что проект не строился и не издавался правильно, SpecsFor MVC в этом случае рассматривал этот сценарий как успешный и приступил к запуску IIS Express, но поскольку проект не был успешно выполнен, приемочные тесты привели к тому, что другое сообщение " Page Cannot Be Displayed поскольку IIS Express работал неправильно.
  • После некоторых дальнейших исследований я обнаружил, что v11.0\WebApplications\Microsoft.WebApplication.targets не был найден, когда файл действительно ссылается на v10, в котором указано, что VS 2012 имеет новый файл MSBuild.exe, расположенный в C:\Program Files (x86)\MSBuild\12.0\Bin.
    • Теперь проблема заключается в том, что в методе SpecsFor MVC 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?

Заранее благодарю за любую помощь!

  • 0
    Я думаю, что переопределение того, как SpecsFor MVC находит MSBuild, является лучшим решением здесь. Я мог бы раскрыть способ явного указания пути. Можете ли вы открыть отчет об ошибке или запрос функции на Github, чтобы я мог вспомнить, как это сделать?
  • 0
    @MattHoneycutt - о проблеме сообщили на github.com/MattHoneycutt/SpecsFor/issues/41 - Большое спасибо за вашу помощь! :)
Теги:
asp.net-mvc
msbuild
visual-studio-2012
acceptance-testing

2 ответа

1
Лучший ответ

Начиная с 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");
  • 0
    Спасибо за вашу оперативную помощь @Matt Honeycutt! :)
0

Чтобы понять, как эти ".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, она должна работать.

  • 0
    Да, если он будет использовать новый VS 2012 MSBuild, находящийся в 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 ошибка
  • 0
    Извините, я не ответил на ваш вопрос. Я думаю, что есть два подхода: 1) Найти и установить правильный пакет, который развертывает необходимый файл .targets (я держу пари в каком-то пакете ASP.NET MVC) или 2) Изменить SpecFlow, чтобы принять другой путь MSBuild. Поскольку это проект с открытым исходным кодом, как насчет Pull Request?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню