2008-09-11 19 views
11

मेरे पास एएसपी.नेट वेब पेज हैं जिसके लिए मैं स्वचालित परीक्षण बनाना चाहता हूं (WatiN & MBUnit का उपयोग करके)। मैं अपने कोड से एएसपी.Net विकास सर्वर कैसे शुरू करूं? मैं आईआईएस का उपयोग नहीं करना चाहता।मैं सी # का उपयोग कर एएसपी.Net विकास सर्वर प्रोग्रामेटिक रूप से कैसे चला सकता हूं?

उत्तर

7

से मैं क्या पता है, तुम ऊपर कमांड प्रॉम्प्ट से डेव सर्वर को निम्नलिखित पथ/वाक्य रचना के साथ आग कर सकते हैं:

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

... इसलिए मैं आप आसानी से इस्तेमाल कर सकते हैं Process.Start कल्पना कर सकता() कुछ कोड के माध्यम से आपको आवश्यक विवरण लॉन्च करने के लिए।

स्वाभाविक रूप से आप उस संस्करण संख्या को समायोजित करना चाहते हैं जो आपके लिए सबसे हालिया/वांछित है।

+5

यदि webdev.webserver.exe उस फ़ोल्डर में स्थित नहीं है, तो यह C: \ Program Files \ Common Files \ Microsoft Shared \ DevServer \ 9.0 (जहां मुझे यह मिला) में स्थित हो सकता है – Casper

+1

कैस्पर धन्यवाद! – Anders

+2

2013 के लिए यह http://stackoverflow.com/questions/4772092/starting-and-stopping-iis-express-programmatically – Recursor

8

यह मैं क्या उपयोग किया जाता है कि काम किया है:

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

कोड पोस्ट करने के लिए धन्यवाद ! :) –

+3

.NET 4 WebDev.WebServer40.exe प्रोग्राम फ़ाइलों (या प्रोग्राम फ़ाइलें (x86)) \ Microsoft साझा \ DevServer \ 10.0 में है। आप पर्यावरण का उपयोग कर सकते हैं। I64BitOperatingSystem यह तय करने में सहायता के लिए कि कौन सा फ़ोल्डर देखना है। बीटीडब्लू, आप पर्यावरण का उपयोग कर फ़ोल्डर (ओं) प्राप्त कर सकते हैं। गेटफोल्डरपैथ (पर्यावरण। विशेष फ़ोल्डर। कॉमनप्रोग्रामफाइल) या पर्यावरण। गेटफोल्डरपाथ (पर्यावरण। विशेष फ़ोल्डर। कॉमनप्रोग्रामफाइलएक्स 86)। –

+0

एक अन्य पथ:% ProgramFiles में WebDev.WebServer40.exe (x86)% \ सामान्य फ़ाइलें \ Microsoft साझा \ DevServer \ 11.0 \ – Kiquenet

1

बिल्डिंग @Ray वेगा के उपयोगी जवाब है, और VS2010 के लिए @James McLachlan की महत्वपूर्ण अद्यतन पर, यहाँ VS2012 कवर और VS2010 पर वापस आने यदि आवश्यक करने के लिए अपने कार्यान्वयन है। मैंने केवल पर्यावरण पर चयन न करने का भी चयन किया। I64BitOperatingSystem क्योंकि यह मेरे सिस्टम पर घबरा गया था। यही है, मेरे पास 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 के लिए उपयुक्त जादू की आपूर्ति करने के रूप में यह जाहिरा तौर पर अभी तक एक अलग योजना का उपयोग करता है सक्षम हो सकता है ...

+0

2013 के लिए, यह इसके बजाय आईआईएस एक्सप्रेस का उपयोग करता है, यहां इसका उपयोग कैसे किया जाए। http://stackoverflow.com/questions/4772092/starting-and-stopping-iis-express-programmatically – Recursor

+0

@Recursor: 2013 संदर्भ के लिए धन्यवाद! –

0

आप आसानी से प्रोसेस एक्सप्लोरर उपयोग कर सकते हैं खोजने के लिए मैन्युअल रूप से इसे शुरू करने के लिए आवश्यक पूर्ण कमांड लाइन विकल्प। अपनी वेबसाइट डीबग करते समय प्रक्रिया एक्सप्लोरर प्रारंभ करें। वीएस2012 के लिए, 'devenv.exe' नोड का विस्तार करें। 'WebDev.WebServer20.exe' पर राइट-क्लिक करें और वहां से आप पथ और कमांड लाइन मान देख सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे