首页 / 知识

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

2023-04-15 00:17:00

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

How can I programmatically run the ASP.Net Development Server using C#?

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


这是我使用的工作原理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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...

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

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

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

自然地,您将需要将该版本号调整为最新/所需的版本号。


基于@Ray Vega的有用答案以及@James McLachlan对VS2010的重要更新,这是我的实现,涵盖了VS2012,并在必要时回退到VS2010。我还选择不只在Environment.Is64BitOperatingSystem上选择,因为它在我的系统上出错了。也就是说,我有一个64位系统,但是Web服务器位于32位文件夹中。因此,我的代码将首先查找64位文件夹,并在必要时退回到32位文件夹。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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",然后从中可以看到路径和命令行值。


服务器运行编程启动

最新内容

相关内容

猜你喜欢