У меня есть веб-страницы ASP.NET, для которых я хочу построить автоматизированные тесты (используя WatiN и MBUnit). Как запустить ASP.NET Development Server из моего кода? Я не хочу использовать IIS.
Как я могу программно запустить ASP.Net Development Server с помощью С#?
Ответ 1
Из того, что я знаю, вы можете запустить dev-сервер из командной строки с помощью следующего пути/синтаксиса:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Webdev.WebServer.exe /port:[PORT NUMBER] /path: [PATH TO ROOT]
... поэтому я мог представить, что вы можете легко использовать Process.Start() для запуска подробностей, которые вам нужны с помощью некоторого кода.
Естественно, вы захотите настроить этот номер версии на то, что для вас самое последнее/желаемое.
Ответ 2
Вот что я использовал:
using System;
using System.Diagnostics;
using System.Web;
...
// settings
string PortNumber = "1162"; // arbitrary unused port #
string LocalHostUrl = string.Format("http://localhost:{0}", PortNumber);
string PhysicalPath = Environment.CurrentDirectory // the path of compiled web app
string VirtualPath = "";
string RootUrl = LocalHostUrl + VirtualPath;
// create a new process to start the ASP.NET Development Server
Process process = new Process();
/// configure the web server
process.StartInfo.FileName = HttpRuntime.ClrInstallDirectory + "WebDev.WebServer.exe";
process.StartInfo.Arguments = string.Format("/port:{0} /path:\"{1}\" /virtual:\"{2}\"", PortNumber, PhysicalPath, VirtualPath);
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
// start the web server
process.Start();
// rest of code...
Ответ 3
Основываясь на полезном ответе @Ray Vega и важном обновлении @James McLachlan для VS2010, вот моя реализация для покрытия VS2012 и возврата к VS2010, если это необходимо. Я также решил не выбирать только на Environment.Is64BitOperatingSystem, потому что он пошатнулся в моей системе. То есть, у меня 64-битная система, но веб-сервер находился в 32-битной папке. Поэтому мой код выглядит сначала для 64-битной папки и при необходимости возвращается к 32-битной.
public void LaunchWebServer(string appWebDir)
{
var PortNumber = "1162"; // arbitrary unused port #
var LocalHostUrl = string.Format("http://localhost:{0}", PortNumber);
var VirtualPath = "/";
var exePath = FindLatestWebServer();
var process = new Process
{
StartInfo =
{
FileName = exePath,
Arguments = string.Format(
"/port:{0} /nodirlist /path:\"{1}\" /virtual:\"{2}\"",
PortNumber, appWebDir, VirtualPath),
CreateNoWindow = true,
UseShellExecute = false
}
};
process.Start();
}
private string FindLatestWebServer()
{
var exeCandidates = new List<string>
{
BuildCandidatePaths(11, true), // vs2012
BuildCandidatePaths(11, false),
BuildCandidatePaths(10, true), // vs2010
BuildCandidatePaths(10, false)
};
return exeCandidates.Where(f => File.Exists(f)).FirstOrDefault();
}
private string BuildCandidatePaths(int versionNumber, bool isX64)
{
return Path.Combine(
Environment.GetFolderPath(isX64
? Environment.SpecialFolder.CommonProgramFiles
: Environment.SpecialFolder.CommonProgramFilesX86),
string.Format(
@"microsoft shared\DevServer\{0}.0\WebDev.WebServer40.EXE",
versionNumber));
}
Я надеюсь, что информированный читатель сможет предоставить соответствующее заклинание для VS2013, поскольку он, по-видимому, использует еще одну схему...
Ответ 4
Вы можете легко использовать Process Explorer, чтобы найти полные параметры командной строки, необходимые для его ручного запуска. Запустите Process Explorer во время отладки вашего сайта. Для VS2012 разверните 'devenv.exe' node. Щелкните правой кнопкой мыши "WebDev.WebServer20.exe" и оттуда вы увидите значения "Путь" и "Командная строка".