如何使用C#以编程方式运行ASP.Net开发服务器?

我有ASP.NET网页,我想为其构建自动化测试(使用WatiN和MBUnit)。 如何从我的代码启动ASP.Net开发服务器? 我不想使用IIS。

据我所知,您可以使用以下路径/语法从命令提示符启动dev服务器:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Webdev.WebServer.exe /port:[PORT NUMBER] /path: [PATH TO ROOT] 

…所以我可以想象你可以轻松地使用Process.Start()通过一些代码启动你需要的细节。

当然,您需要将该版本号调整为最新/最适合您的版本号。

这就是我用过的方法:

 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... 

基于@Ray Vega的有用答案以及@James McLachlan对VS2010的重要更新,这里是我的实现,以涵盖VS2012并在必要时回退到VS2010。 我还选择不在Environment.Is64BitOperatingSystem上选择,因为它在我的系统上出错了。 也就是说,我有一个64位系统,但Web服务器在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 { 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提供适当的咒语,因为它显然使用了不同的方案……

您可以轻松使用Process Explorer查找手动启动它所需的完整命令行选项。 在调试网站时启动Process Explorer。 对于VS2012,展开“devenv.exe”节点。 右键单击“WebDev.WebServer20.exe”,然后从中可以看到“路径”和“命令行”值。