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