如何以编程方式构造pack:URI以引用不同程序集中的资源



我想以编程方式构建一个包:Uri。此操作失败:

Uri myuri = new Uri("pack://application:,,,/lookup2.xml");

这似乎在某些环境中得到了支持(基于我看到的其他答案(,但它给我带来了System.UriFormatException: Invalid URI: Invalid port specified

这项工作:

Uri appBase = new Uri("application:///", UriKind.Absolute);
Uri appPath = new Uri("/lookup2.xml", UriKind.Relative);
Uri packUri = PackUriHelper.Create(appBase, appPath)

返回当前程序集中资源的pack:URI。现在我想创建pack://application:,,,/OtherAssembly;component/lookup2.xml

我不知道该怎么做。也许我忽略了一些显而易见的东西。但是如果我使/OtherAssembly;component/成为appPath的一部分/"字符被转义。我得到了pack://application:,,,,OtherAssembly;component/lookup2.xml,就我从MS文档中了解到的pack:URI中的程序集引用而言,这是不对的。

看起来PackagePart可能会有所帮助,但我不确定。无论如何,我看不出如何从Assembly构建一个。

指针,好吗?

下面的部分答案。第一个Uri输出良好。第二个会变得混乱,因为我认为PackUriHelper可能无法处理这种情况。也许会有所帮助。

Uri appBase = new Uri("application:///", UriKind.Absolute);
Uri appAssembly = new Uri("/OtherAssembly;component", UriKind.RelativeOrAbsolute);
Uri appBaseOtherAssembly = PackUriHelper.Create(appBase, appAssembly);
Console.WriteLine(appBaseOtherAssembly.ToString()); //pack://application:,,,/OtherAssembly;component
Uri appPath = new Uri("/lookup2.xml", UriKind.Relative);
Uri completeUri = new Uri(appBaseOtherAssembly, appPath); 
Console.WriteLine(completeUri.ToString());//not sure why; produces: pack://application:,,,/lookup2.xml 
var uri = PackUriHelper.Create(appBaseOtherAssembly, appPath);
Console.WriteLine(uri.ToString()); //pack://pack:,,application:%2C%2C%2C,OtherAssembly;component/lookup2.xml

相关内容

  • 没有找到相关文章

最新更新