我对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:\驱动器的完整路径。
答案 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
}