【问题标题】:How can i go back a level when specifying a path in C#?在 C# 中指定路径时如何返回一个级别?
【发布时间】:2012-12-12 16:07:27
【问题描述】:

我想以编程方式在 Visual Studio 的“扩展”文件夹中安装一个文件夹。我能得到的最接近的是使用 VS100COMNTOOLS 环境变量。我想要做的是从“工具”文件夹返回一级,进入 IDE/Extensions,类似于 VS100COMNTOOLS..\IDE\Extensions。这是我的代码:

namespace TemplatesCustomAction
{
    public class CustomActions
    {
        [CustomAction]
        public static ActionResult CustomAction1(Session session)
        {

            var vspath = Environment.GetEnvironmentVariable("VS100COMNTOOLS");

            session["VSINSTALLATIONFOLDER"] = string.Format(@"{0}\..\IDE\Extensions", vspath);



            return ActionResult.Success;
        }
    }
}

【问题讨论】:

  • 应该没问题。您遇到了什么问题?
  • 路径中出现“..”无效字符。当我运行我的 MSI 时
  • 您也可以使用“更长”的方式创建DirectoryInfo 并获取父目录:new DirectoryInfo(vspath).Parent.FullName;
  • Path.GetDirectory 传递一个目录会返回父目录,并用 Path.Combine 构建 Paths。

标签: c# path wix


【解决方案1】:

使用Path.GetFullPath:

var pathWithParent = string.Format(@"{0}\..\IDE\Extensions", vspath);
session["VSINSTALLATIONFOLDER"] = Path.GetFullPath(pathWithParent);

虽然我也更愿意使用Path.Combine

var pathWithParent = Path.Combine(vspath, @"\..\IDE\Extensions");

【讨论】:

  • Path.GetFullPath 在考虑了路径中的“..\”(上一个目录)符号后为我提供了路径。 Path.Combine 只是组合了两个字符串,但没有考虑和去掉路径中的“..\”符号。
  • "\" 适用于 Windows,不是跨平台的
  • @AlexanderDanilov - wix(在问题中标记)仅适用于 Windows。
  • @Oded 是的,但问题是关于 C# 路径,而不是关于 wix 或其他任何东西,搜索该问题的人(如我)会找到它。并且不会有另一个相同的问题,因为它将被标记为重复。所以它在所有意义上都应该是正确的。如果作者删除所有不引用它的代码会更好。
  • @AlexanderDanilov - 帖子上有一个编辑链接。非常欢迎您改进它。
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多