问题描述
|
此工作流程是asp.net应用程序中的xamlx文件。
我有一个带有InArgument的CodeActivity,它采用相对文件路径指向位于asp.net应用程序中的文本文件。
将相对路径转换为绝对路径的正确方法是什么,以便我可以将文件读入内存。
HttpContext.Current在代码活动中为null,因此我无法使用Server.MapPath。
我现在的工作方式是从web.config中读取一个名为SitePhysicalRoot的应用程序设置,然后将SitePhysicalRoot设置和参数值传递给Path.Combine。
我觉得有一种更好的方法(也许使用WF扩展)。如果要使用WF扩展,有人可以提供示例代码吗?
解决方法
这是我的工作:
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;
}
}
, 请尝试以下*:
var path = Path.Combine(HostingEnvironment.ApplicationPhysicalPath,\"foo.txt\");
*我一生未经测试,从未使用过WF,不知道它是否会起作用,这只是我想到的第一件事