/// <summary>
        /// Initializes a new instance of the <see cref="TestSiteManager" /> class.
        /// </summary>
        /// <param name="projectName">Name of the web project. This is assumed to be
        /// both the project folder name, and also the <c>.csproj</c> name (without the .csproj extension).
        /// If the project folder name and .csproj name are different, 
        /// set the .csproj name in <paramref name="options"/>.</param>
        /// <param name="options">Optional configuration settings.</param>
        public TestSiteManager(string projectName, TestSiteOptions options = null)
        {
            options = options ?? new TestSiteOptions();
            options.ApplyDefaultsWhereNecessary (projectName);
            options.Validate();

            _deployer = new TestSiteDeployer(options.Deployer);
            _server = new TestSiteServer (_deployer.TestSitePath, options.Server);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestSiteManager" /> class.
        /// </summary>
        /// <param name="projectName">Name of the web project. This is assumed to be
        /// both the project folder name, and also the <c>.csproj</c> name (without the .csproj extension).
        /// If the project folder name and .csproj name are different, 
        /// set the .csproj name in <paramref name="options"/>.</param>
        /// <param name="options">Optional configuration settings.</param>
        public TestSiteManager(string projectName, TestSiteOptions options = null)
        {
            options = options ?? new TestSiteOptions();

            if (options.ApplicationPath == null || !options.ApplicationPath.StartsWith("/"))
                throw new ArgumentException("Application path must start with '/'.", "options");

            string siteRoot = (!string.IsNullOrWhiteSpace(options.ProjectDir)) ? options.ProjectDir : GetPathRelativeToCurrentAssemblyPath(@"..\..\..\" + projectName);
            if (!Directory.Exists(siteRoot))
                throw new Exception("A project with name '" + projectName + "' could not be found.");

            _deployer = new TestSiteDeployer(siteRoot, options.ProjectFileName ?? projectName + ".csproj", options.SolutionDir, options.ProjectDir, options.Targets);
            _server = new TestSiteServer(_deployer.TestSitePath,
                options.Port, options.ApplicationPath,
                options.ShowIisExpressWindow, options.EnableWindowsAuthentication);
        }