C# 如何使用C以编程方式运行ASP.Net开发服务器?
我有ASP.NET网页,我想使用WatiN&MBUnit为其构建自动化测试。如何从代码启动ASP.Net开发服务器?我不想使用IIS。据我所知,您可以使用以下路径/语法从命令提示符启动开发服务器:C# 如何使用C以编程方式运行ASP.Net开发服务器?,c#,asp.net,C#,Asp.net,我有ASP.NET网页,我想使用WatiN&MBUnit为其构建自动化测试。如何从代码启动ASP.Net开发服务器?我不想使用IIS。据我所知,您可以使用以下路径/语法从命令提示符启动开发服务器: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Webdev.WebServer.exe /port:[PORT NUMBER] /path: [PATH TO ROOT] …所以我可以想象你可以很容易地使用这个过程。开始通过一些代码来启动你需要的细节 当
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Webdev.WebServer.exe /port:[PORT NUMBER] /path: [PATH TO ROOT]
…所以我可以想象你可以很容易地使用这个过程。开始通过一些代码来启动你需要的细节
当然,您会希望将该版本号调整为您最新/想要的版本号。这就是我使用的有效版本号:
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.is64位OperatingSystem上选择,因为它在我的系统上出错。也就是说,我有一个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<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提供适当的咒语,因为它显然使用了不同的方案…您可以轻松使用Process Explorer找到手动启动它所需的完整命令行选项。
调试网站时启动Process Explorer。对于VS2012,展开“devenv.exe”节点。右键单击“WebDev.WebServer20.exe”,从中可以看到路径和命令行值。如果WebDev.webserver.exe不在该文件夹中,则它可能位于C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0中,这是我在2013年找到它的地方。这里可能是使用相对路径?START/D%WEBDEV40%/B WebDev.WebServer40.exe/端口:9195/路径:..\..\Reale.VSIntegration\Reale.VSIntegration.SvcDespliegue.Host不适用于meFor.NET 4 WebDev.WebServer40.exe的程序文件或程序文件x86\Microsoft Shared\DevServer\10.0。您可以使用Environment.Is64BitOperatingSystem帮助决定要查找的文件夹。顺便说一句,您可以使用Environment.GetFolderPathEnvironment.SpecialFolder.CommonProgramFiles或Environment.GetFolderPathEnvironment.SpecialFolder.CommonProgramFilesX86.另一个路径:WebDev.WebServer40.exe,位于%ProgramFilesx86%\Common Files\Microsoft Shared\DevServer\11.0\中。2013年,它改用IIS Express,以下是如何使用它@递归器:感谢2013年的参考资料!