diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.SharePoint2013/HostedSharePointServer2013.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.SharePoint2013/HostedSharePointServer2013.cs index 9244de46..dc7faca0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.SharePoint2013/HostedSharePointServer2013.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.SharePoint2013/HostedSharePointServer2013.cs @@ -29,6 +29,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Text.RegularExpressions; +using System.Xml; using Microsoft.Win32; using WebsitePanel.Providers.SharePoint; using WebsitePanel.Providers.Utils; @@ -306,13 +308,13 @@ namespace WebsitePanel.Providers.HostedSolution try { - Type type = typeof (HostedSharePointServer2013Impl); - var info = new AppDomainSetup {ApplicationBase = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), PrivateBinPath = "bin; bin/debug"}; + Type type = typeof(HostedSharePointServer2013Impl); + var info = new AppDomainSetup { ApplicationBase = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), PrivateBinPath = GetPrivateBinPath() }; domain = AppDomain.CreateDomain("WSS30", null, info); - var impl = (HostedSharePointServer2013Impl) domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); + var impl = (HostedSharePointServer2013Impl)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); return action(impl); - } + } finally { if (domain != null) @@ -320,6 +322,29 @@ namespace WebsitePanel.Providers.HostedSolution AppDomain.Unload(domain); } } + + throw new ArgumentNullException("action"); + } + + /// Getting PrivatePath from web.config. + /// The PrivateBinPath. + private static string GetPrivateBinPath() + { + var lines = new List{ "bin", "bin/debug" }; + string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "web.config"); + + if (File.Exists(path)) + { + using (var reader = new StreamReader(path)) + { + string content = reader.ReadToEnd(); + var pattern = new Regex(@"(?<=probing .*?privatePath\s*=\s*"")[^""]+(?="".*?>)"); + Match match = pattern.Match(content); + lines.AddRange(match.Value.Split(';')); + } + } + + return string.Join(Path.PathSeparator.ToString(), lines.ToArray()); } #endregion