Мое приложение Silverlight не показывает изменения - PullRequest
3 голосов
/ 26 октября 2010

Это мой первый раз с SL (но не с WPF). Я изучаю PRISM и смотрю отличные видео MTaulty: http://channel9.msdn.com/blogs/mtaulty/prism--silverlight-part-1-taking-sketched-code-towards-unity

Пока все хорошо, я с последним видео и делаю то же самое, что и Он в моей VS. Я использую SL4 & mvc2 web & prism для sl4.

Я нашел проблему и не знаю, что происходит.

Само мое приложение SL не показывает никаких изменений. У меня есть базовая оболочка:

<Grid x:Name="LayoutRoot" Background="Azure">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <ctls:GridSplitter Grid.RowSpan="2" HorizontalAlignment="Right"
                       VerticalAlignment="Stretch" Width="2"
                       Background="Black" />
    <ctls:GridSplitter Grid.Column="1"
                       HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
                       Height="2" Background="Black" />

    <Border Background="SkyBlue" CornerRadius="3"
            Margin="5" Grid.RowSpan="2">
        <ContentControl rgn:RegionManager.RegionName="FolderSelectionRegion"
                        HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                        HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
    </Border>
    <Border
        Background="SkyBlue"
        CornerRadius="3"
        Margin="5"
        Grid.Column="1">
        <ContentControl
            rgn:RegionManager.RegionName="MailSelectionRegion"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            HorizontalContentAlignment="Stretch"
            VerticalContentAlignment="Stretch" />
    </Border>
</Grid>

Дело в том, что я зарегистрировал View в первом regionManager, отлично, я зарегистрировал второе представление, но оно не показывает ... Хорошо, какая-то ошибка где-то ... но нет.

Я понял, что граница для второго RegionManager не отображается, хорошо. Я прокомментировал строку, которая регистрирует вид (вид работает), и вид все еще отображается. Я прокомментировал загрузчик, удалив его из Application_Startup, ничего, что все еще показывает представление (не возможно, нет никакого способа, которым мое приложение знает, как выполнить Shell, все закомментировано).

Короче говоря, я уверен, что если я удалю 3 файла, приложение все еще работает ... Я очистил решение, удалил .xap файлы из ClientBin ... Ничего, приложение все еще показывает вид и так далее. Другими словами, приложение не отражает изменений в коде.

Что происходит?

Спасибо.

РЕДАКТИРОВАТЬ: Почти год спустя ...

Итак, с тех пор я не трогал Silverlight, но сегодня я хотел сделать очень простое приложение (только путь и текстовое поле) и ... Да, мое приложение начало не показывать изменения.

Я не могу воспроизвести ошибку, я не знаю, что это за триггер, но я знаю, что это проблема ASP.NET MVC.

Проект, о котором я здесь говорю, и проект, который я сделал сегодня, оба использовали ASP.NET MVC для запуска проекта SL.

Я загрузил проект EmailClient (только ту часть, которая нам интересна) на мой хост: www.foxandxss.net/stuff/EmailClient.rar

Легко увидеть проблему. Для начала вы можете видеть, что в Shell.xaml цвет LayoutRoot - это Azure, и если вы запустите приложение, оно будет зеленым (когда я сегодня открыл это приложение, я изменил его на зеленый и работал, но изменений больше нет). Если вы измените цвет на другой, он не изменится. Если вы зайдете в App.xaml.cs и прокомментируете строки, которые создают и запускают загрузчик (чтобы приложение не запускалось), приложение все равно откроется. Как будто запущенное приложение - это какой-то кеш и каждое внесенное вами изменение, вы его не увидите.

Я попытался удалить xap из проекта MVC, но ничего.

Дело в том, что если вы щелкнете правой кнопкой мыши по проекту SL и нажмете «Просмотр в браузере», вы увидите изменения (Azure BG или ничего, если вы прокомментировали загрузчик), но если вы запустите его из проекта MVC, ничего .

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

В прошлом у меня были проблемы с кэшированием файлов XAP.Если это проблема, я бы вставил фиктивный параметр рядом с путем к файлу xap (в данном случае отметка времени):

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="ClientBin/EmailClient.xap?20110712160700"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50826.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

Если вы обновите этот параметр в каждой сборке, это приведет к аннулированию кэша и загрузкепоследний файл xap.

2 голосов
/ 13 июля 2011

У Самуэля правильная идея, однако вы можете заставить Silverlight автоматически игнорировать предыдущие метки времени, проверив время последней записи на сервере

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <%
          const string orgSourceValue = @"ClientBin/SilverlightApp.xap";
          string param;
          if (System.Diagnostics.Debugger.IsAttached)
              param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";
          else
          {
              string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + orgSourceValue;
              DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);
              param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore=" + xapCreationDate.ToString("yyyy-MM-dd_HH-mm-ss") + "\" />";
          }
          Response.Write(param);
      %>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50401.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...