此工作流程是asp.net应用程序中的xamlx文件。
我有一个带有InArgument的CodeActivity,它接受一个存在于asp.net应用程序中的文本文件的相对文件路径。
将相对路径转换为绝对路径的正确方法是什么,以便我可以将文件读入内存。
HttpContext.Current在代码活动中为null,因此我无法使用Server.MapPath。
我现在使用它的方法是从web.config读取一个名为SitePhysicalRoot的appsetting,并将SitePhysicalRoot设置和inargument值传递给Path.Combine。
我觉得有更好的方法(可能有WF扩展名)。如果要使用WF扩展,有人可以提供示例代码吗?
答案 0 :(得分:0)
尝试以下 * :
var path = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "foo.txt");
*未经测试,从未在我的生活中使用WF,不知道它是否会起作用,这只是我想到的第一件事
答案 1 :(得分:0)
这就是我的所作所为:
using System;
using System.Diagnostics.Contracts;
using System.IO;
using System.Web.Hosting;
public static class PathExtensions
{
public static String ExpandPath(this String path)
{
if (String.IsNullOrWhiteSpace(path))
{
return path;
}
String resolvedPath = Environment.ExpandEnvironmentVariables(path);
resolvedPath = ExpandHostedPath(resolvedPath);
return resolvedPath.ToFullPath();
}
public static String ToFullPath(this String path)
{
Contract.Requires<ArgumentNullException>(String.IsNullOrWhiteSpace(path) == false);
DirectoryInfo directory = new DirectoryInfo(path);
if (directory.Exists)
{
return directory.FullName;
}
return path;
}
private static String ExpandHostedPath(String path)
{
if (Path.IsPathRooted(path))
{
return path;
}
if (path.StartsWith("~", StringComparison.OrdinalIgnoreCase) == false)
{
return path;
}
if (HostingEnvironment.IsHosted == false)
{
return path;
}
String hostedPath = HostingEnvironment.MapPath(path);
return hostedPath;
}
}