Структура каталогов моего проекта Silverlight выглядит следующим образом:
\Bin
- MainModule.xap
- \Images
--- Image1.png
--- Image2.png
- \Modules
--- SubModule.xap
Я хочу иметь возможность запустить его через веб-сервер или напрямую через Visual Studio (в целях отладки я хочу обойти загрузку контента).
В моем коде загрузки медиа я делаю что-то вроде следующего:
if (runningLocally)
{
var bitmapImage = new BitmapImage();
bitmapImage.UriSource = new Uri("Images/Image1.png", UriKind.Relative);
var image = new Image();
image.Source = bitmapImage;
}
else
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += (s, e) =>
{
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(e.Result);
var image = new Image();
image.Source = bitmapImage;
};
wc.OpenReadAsync(new Uri("Images/Image1.png", UriKind.Relative));
}
Это работает для изображений, но у меня также есть подмодули, которые являются просто сборками, вмещающими UserControl
s. Поскольку Silverlight не умеет читать диск, я смирился с тем, что мне придется «скачивать» нужные мне XAP независимо от того, запущен я локально или нет. Проблема в том, что если я запускаю проект локально и пытаюсь использовать WebClient
для загрузки XAP, я получаю исключение:
System.Net.WebException: An exception occurred during a WebClient request. ---> System.NotSupportedException: The URI prefix is not recognized.
Есть ли какой-либо способ (WebClient или иным образом), чтобы я мог получить доступ к своим XAP подмодуля при непосредственном запуске проекта Silverlight вместо попадания на веб-сервер?
EDIT:
Забыл упомянуть, что я также пытался использовать MEF с DeploymentCatalog
, и, хотя я не получаю исключения, ничего не составляется, поэтому я могу только предположить, что у него такая же проблема.