我正在开发一个项目来重用UWP App中的一个旧.NET库。我读了几篇关于这篇文章 .NET 2.0标准库。
https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-migrate
我按照该文章中的步骤创建了一个新的.NET Standard 2.0库,将旧的源文件复制到新文件中 库项目并安装了缺少的NuGet包并编译了项目而没有任何错误。
下一步是创建一个UWP应用程序并添加库项目作为参考。
我的图书馆正在将文件从一种格式转换为另一种格式。所以它使用System.IO和System.Xml.Serialization 命名空间。我知道在UWP和Windows应用商店应用程序中更改了文件读取和写入的安全设置 导致一些问题。
我正在打开像这样的文件
FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.Desktop;
fileOpenPicker.FileTypeFilter.Clear();
fileOpenPicker.FileTypeFilter.Add(".txt");
StorageFile file = await fileOpenPicker.PickSingleFileAsync();
// and here I am calling my Library
var doc = ParserFactory.Parse(file.Path);
// and that's what my library is trying to do
....
var myfile = File.OpenRead(filename)
// File.OpenRead throws a Security Exception.
我以这种方式设计了我的库的接口,你必须传递文件路径,库本身会关注 其余部分。
那么有人知道避免安全例外的解决方案吗?我真的很感激不要重写我的库和/或 "污染"我的库与Windows.Storage命名空间。
提前致谢
答案 0 :(得分:1)
我的建议是为ParserFactory.Parse(Stream stream)
创建重载并使用StorageFile
打开Stream
:
var file = await fileOpenerPicker.PickSingleFileAsync();
var stream = await file.OpenStreamForReadAsync();
var doc = ParserFactory.Parse(stream);
不确定Parse
函数的工作原理,但希望您关心的只是Stream
实现,而不是FileStream
。