我想以编程方式构建一个包: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