Проблема с разрешениями файлов в Silverlight - PullRequest
1 голос
/ 18 ноября 2010

У меня есть проект Silverlight 4 / C #, над которым я работаю в Visual Studio. Я создал файл данных XML, щелкнув правой кнопкой мыши по проекту >> Добавить новый элемент >> Файл XML. Затем я пытаюсь открыть файл:

        StreamReader streamReader = new StreamReader("data.xml");

Однако это дает исключение безопасности. Как я могу обойти это или предоставить необходимые разрешения?

Ответы [ 4 ]

2 голосов
/ 18 ноября 2010

Вам необходимо пометить элемент как ресурс , а НЕ встроенный ресурс .

С MSDN ...

Окно свойств в Visual Studio предоставляет несколько других значений в Раскрывающийся список Build Action. Тем не мение, Вы можете использовать только предыдущие три значения с проектами Silverlight. В в частности, Silverlight встроенный Ресурсы всегда должны использовать Ресурс строить действие, а не встроенный Действие по созданию ресурса, которое использует формат, который Silverlight не может признать.

Здесь можно увидеть большую прогулку , влекущую за собой то, чего вы пытаетесь достичь. Поскольку вы не пытаетесь получить доступ к файлам на диске, но в качестве ресурсов это не проблема. Здесь уместно ни изолированное хранилище, ни повышенные разрешения.

2 голосов
/ 18 ноября 2010

Silverlight по умолчанию не разрешает локальный доступ к файловой системе.Возможны следующие варианты:

Если вам нужно хранить данные в целом, используйте IsolatedStorage, если можете.

2 голосов
/ 18 ноября 2010

Вам просто нужно иметь возможность прочитать файл во время выполнения? Если это так, я бы посоветовал вам установить действие сборки Resource в Visual Studio, а затем использовать Assembly.GetManifestResourceStream, чтобы открыть его. Это самый простой способ связать данные только для чтения с приложением, IMO.

1 голос
/ 18 ноября 2010

Этот конструктор StreamReader ожидает путь к файлу в локальной файловой системе, который доступен только из браузера с повышенным доверием.

Вместо этого следует использовать Application.GetResourceStream: -

Stream stream = Application.GetResourceStream(new Uri("data.xml", UriKind.Relative));
StreamReader reader = new StreamReader(stream);

Однако я ожидаю, что вы на самом деле просто хотите это в XDocument, вы обойдете эту стадию StreamReader: -

XDocument doc = XDocument.Load(stream);

Кстати, я бы лично оставил XML как контент в Xap, а не встраиваяэто в сборке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...