WF4工作流程/活动中的相对文件路径

问题描述

| 此工作流程是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,不知道它是否会起作用,这只是我想到的第一件事