【问题标题】:How to determine path to project folder in .Net?如何确定.Net中项目文件夹的路径?
【发布时间】:2010-03-19 14:07:49
【问题描述】:

我有一个名为 XSL 的项目文件夹,其中包含用于转换 xml 的 xsl 文件。我使用以下代码来获取 xsl 文件:

string html = @"c:\temp\export.html";
XslCompiledTransform transform = new XslCompiledTransform();
Uri uri = new Uri(@"XSL\ToHtml.xsl", UriKind.Relative);
transform.Transform(CurrentXmlFile, html);
System.Diagnostics.Process.Start(html);

这在调试时可以正常工作,但是当我使用 clickonce 部署并安装它时,我收到一个错误 - “找不到路径的一部分 {我的用户文档路径}\XSL\ToHtml.xsl”。它确实需要在 {installation folder}\XSL\ToHtml.xsl 中查找。

我必须怎么做才能正确引用此路径?

【问题讨论】:

  • 你确定你的应用部署后根目录下有这样的路径吗?
  • @andrew。你是对的。它不见了。为什么?文件设置为资源,“如果较新则复制”
  • 我将其更改为 Content, Copy if newer 并且有效!谢谢安德鲁

标签: .net path xslt


【解决方案1】:

正如 DSO 的回答中所述,当您想要应用程序可执行文件或程序集所在的目录时,不应使用或隐式依赖 Environment.CurrentDirectory

但是我会使用 AppDomain.CurrentDomain.BaseDirectory 而不是依赖当前正在执行的程序集的位置。

【讨论】:

    【解决方案2】:

    相对路径基于当前目录 (Environment.CurrentDirectory),您的应用无法控制该目录。如果您想根据应用的安装文件夹创建路径,请使用:

    string file = Path.Combine(
        System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
        @"XSL\ToHtml.xsl");
    

    【讨论】:

    • 我很抱歉 -1 这个,但我刚刚发现这种方法在以非管理员身份运行时会中断,并且用户在快捷方式上单击“以管理员身份运行”。由于某些奇怪的原因,GetExecutingAssembly() 最终返回快捷方式的位置,而不是当前正在执行的程序集的位置。而是使用 AppDomain.CurrentDomain.BaseDirectory。这始终有效。
    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2017-01-05
    • 2011-03-13
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多