【问题标题】:How can I programmatically run the ASP.Net Development Server using C#?如何使用 C# 以编程方式运行 ASP.Net 开发服务器?
【发布时间】:2008-09-11 17:00:47
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这是我使用的有效方法:

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

    【讨论】:

    • 对于 .NET 4 WebDev.WebServer40.exe 位于 Program Files(或 Program Files (x86))\Microsoft Shared\DevServer\10.0 中。您可以使用 Environment.Is64BitOperatingSystem 来帮助决定查看哪个文件夹。顺便说一句,您可以使用 Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles) 或 Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFilesX86) 获取文件夹。跨度>
    • 另一个路径:%ProgramFiles(x86)%\Common Files\Microsoft Shared\DevServer\11.0\中的WebDev.WebServer40.exe
    【解决方案2】:

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

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

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

    您自然会希望将该版本号调整为您最新/想要的任何版本。

    【讨论】:

    • 如果 webdev.webserver.exe 不在该文件夹中,它可能位于 C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0 (我找到它的地方)跨度>
    • 也许使用相对路径? START /D %WEBDEV40% /B WebDev.WebServer40.exe /port:9195 /path:"..\..\Reale.VSIntegration\Reale.VSIntegration.SvcDespliegue.Host" 不适合我
    【解决方案3】:

    基于@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<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”节点。右键单击“WebDev.WebServer20.exe”,从那里您可以看到路径和命令行值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      相关资源
      最近更新 更多