【问题标题】:Working with relative file paths in .Net在 .Net 中使用相对文件路径
【发布时间】:2009-11-18 21:09:06
【问题描述】:

我有一个 C# 项目,其中包含一些我需要使用 Uri 类引用的资源。对于这个特定的问题,我在项目根目录的“Shaders”文件夹中放置了一些着色器,但我之前在处理其他文件(如图像等)时遇到过这个问题。到目前为止,我使用了简单的解决方案,给出了一个固定的绝对路径,并确保文件存在于该位置。不用说 - 这不是一个好的解决方案,从长远来看它不会起作用......

那么,如何使用相对路径来引用我的资源?我想我的问题是双重的:

  • 首先;我不想将我的 Debug 文件夹的相对路径引用到项目文件夹。我希望将文件复制到构建文件夹。着色器包含在项目中,但显然这还不够。我如何告诉项目在构建时复制文件?或者;解决这个问题的常用方法是什么?

  • 第二;当我将“Shaders”文件夹复制到我的构建文件夹时 - 我使用什么 Uri 语法来引用例如“myShader.ps”放在这个文件夹里?我可以简单地说file:///Shaders/myShader.ps吗?

【问题讨论】:

    标签: c# .net resources uri


    【解决方案1】:

    要从您的应用程序目录中获取 Uri,请执行以下操作:

    Uri baseUri = new Uri(System.Reflection.Assembly.GetEntryAssembly().Location);
    Uri shader = new Uri(baseUri, "shaders/test.ps");
    

    【讨论】:

    • 奇怪的是,我们不得不求助于反思。并非所有环境都会接受这一点。另外(尽管我们在这里偏离了确切的问题)如果 URI 是相对于当前目录而不是相对于程序集位置怎么办?
    【解决方案2】:

    先回答:

    如何告诉项目在构建时复制文件?

    将文件添加到项目中,右键,选择Properties,将Copy to Output Directory改为Always Copy

    【讨论】:

    • 我很困惑..我已经这样做了,但它没有复制。但是,“构建操作”设置为“资源”。我测试了更多,“无”或“嵌入式资源”使文件复制。谢谢!什么是正确的“构建操作”?
    猜你喜欢
    • 2021-10-22
    • 2011-01-27
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多