Чтение файла в библиотеке классов WinRT

В проекте приложения Магазина Windows я читал такой файл:

var uri = new Uri("ms-appx:///DataModel/Accounts.csv");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);

var read = await FileIO.ReadTextAsync(file);

Файл Accounts.csv был добавлен с помощью действия сборки content.

Теперь я переместил код в отдельную библиотеку классов. Файл по-прежнему добавляется с действием сборки content.

Но схема uri больше не работает.

Я также пробовал:

var file = await StorageFile.GetFileFromPathAsync("/DataModel/Accounts.csv");
var read = await FileIO.ReadTextAsync(file);

Как получить доступ к файлу в библиотеке классов WinRT? Библиотека файлов ведет себя иначе, чем проект приложения Store?


person Marius    schedule 11.06.2013    source источник


Ответы (1)


Вы можете получить доступ к файлу в библиотеке классов Магазина Windows следующим образом.

var _Assembly = Assembly.Load(new AssemblyName("ASSEMBLY_NAME"));
var _Stream = _Assembly.GetManifestResourceStream("YOUR_FILE_NAME_WITH_PATH.xml");

Обратите внимание, что члены пути к библиотеке классов разделены ., а не \.

Чтобы получить все имена ресурсов

var names = _Assembly.GetManifestResourceNames();

Метод GetManifestResourceStream всегда будет возвращать NULL, если для свойства ресурса built action не установлено значение embedded resource.

person Farhan Ghumra    schedule 11.06.2013
comment
Как вы правильно указали, ваше решение работает, если для действия сборки установлено значение embedded resource. но я установил действие сборки на content. - person Marius; 11.06.2013
comment
Но действие сборки content не сработает, вам нужно использовать embedded resource, если это библиотека классов. - person Farhan Ghumra; 11.06.2013
comment
Это новое ограничение WindowsRT? В .Net можно было добавлять файлы в библиотеки классов с content build action и copy if newer. В сборке вы можете просто написать простую var text = File.ReadAllText("TextFile1.txt") для доступа к файлу. - person Marius; 11.06.2013
comment
+1 Отличный ответ! Путь примерно такой: MyClassLib.DataModel.Accounts.csv. Я использую GetType().GetTypeInfo().Assembly, чтобы получить исполняемую сборку. - person Hong; 11.04.2015