public string ResolvePath(string path)
{
const string DataDirectory = "|DataDirectory|";
path = (path ?? string.Empty).Trim();
if (!string.IsNullOrEmpty(path))
{
int dataDirectoryIndex = path.IndexOf(DataDirectory, StringComparison.OrdinalIgnoreCase);
if (dataDirectoryIndex > -1)
{
path = path.Substring(dataDirectoryIndex + DataDirectory.Length);
path = Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"), path);
}
else
{
Regex exp = new Regex(string.Concat("[", Regex.Escape(new string(Path.GetInvalidPathChars())), "]"));
if (!exp.IsMatch(path) && !Path.IsPathRooted(path))
{
string dir = ElementInformation.Source;
dir = !string.IsNullOrEmpty(dir) ? Path.GetDirectoryName(dir) : null;
if (!string.IsNullOrEmpty(dir))
{
path = Path.Combine(dir, path);
}
else
{
path = Path.GetFullPath(path);
}
}
}
}
else
{
path = AppDomain.CurrentDomain.BaseDirectory;
}
return path;
}