URI类101 - 相对项目参考

时间:2010-10-24 18:26:56

标签: c# uri

我对URI class几乎一无所知。我需要创建一个相对URI来引用我的项目中的文件(即项目的根目录)。

我该怎么做?

这是我尝试过的,似乎不起作用:

var uri = new Uri("ModuleCatalog.xaml", UriKind.Relative)

我也尝试过:

var uri = new Uri("/ShellProject;component/ModuleCatalog.xaml", UriKind.Relative);

当我在调试器中检查我的uri变量时,它抛出了很多异常。唯一真实的值是原始文本值。

我需要做些什么才能使它成为有效的uri?

我认为我不了解Uri对象是如何工作的。

我想我要求了解如何制作一个uri的基础知识并让它在我的项目中引用一个文件(没有必须硬编码来自C:\驱动器的完整路径。

2 个答案:

答案 0 :(得分:3)

您的应用程序是Web应用程序吗? 您不使用URI来引用非Web应用程序中的本地文件。

表达式

var uri = new Uri("ModuleCatalog.xaml", UriKind.Relative)

不会在构造上抛出任何异常,如果使用不当,它会抛出。 由于您提到您正在开发WPF应用程序,如果要查找此文件,则应使用:

string assemblyLocation = Assembly.GetExecutingAssembly().Location
string moduleCatalogPath = Path.Combine(assemblyLocation, "ModuleCatalog.xaml");

答案 1 :(得分:0)

什么“不起作用”是什么意思?这两个代码示例都编译并运行,给出了有效的相对URI。

或许您想从相对URI中创建绝对URI?也就是说,如果您的root是“http://example.com”,则需要创建“http://example.com/ModuleCatalog.xaml”。在这种情况下,使用允许您传入根目录的Uri.TryCreate重载。例如:

Uri baseUri = new Uri("http://example.com");
Uri newUri;
if (Uri.TryCreate(baseUri, "ModuleCatalogue.xaml", out newUri))
{
    // Uri created successfully
}