0

我正在尝试将应用程序提交到应用程序中心,它正在使用背景代理来更新应用程序磁贴。后台代理需要使用 Microsoft.Phone.dll,但是当我提交应用程序时出现以下错误

2011:后台代理无法使用 Microsoft.Phone.Shell.ShellTile::Create,这是 TileAgent.dll 试图使用的程序集。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 试图使用的程序集 System.Windows.Controls.MediaElement::Pause。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::Stop。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::Play。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::set_Position。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::set_AutoPlay。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::SetSource。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Media.VideoBrush。更新您的文件,然后重试。

2011:后台代理无法使用 Microsoft.Phone.dll 正在尝试使用的 System.Windows.Controls.MediaElement::.ctor。更新您的文件,然后重试。

尽管我没有使用任何这些程序集,也没有在代理项目的任何地方引用它们。请帮忙!

编辑:我删除了 create tile 方法,现在这个错误消失了。其余的虽然保持不变,但我没有使用它们中的任何一个在这个项目中绝对没有使用 System.Widnows.Contols

编辑:这是我在代理项目中引用的列表

Microsoft.Phone
mscorelib
mscorelib.extensions
system
System.Core
System.Net
System.Windows
System.Xml
4

3 回答 3

0

您不能使用计划任务中的某些 API。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/hh202962(v=vs.92).aspx

于 2012-10-09T07:26:33.833 回答
0

您的代理对使用列出的 API 的代码有一些参考。例如:

你有一些课程会创建新的瓷砖。Microsoft.Phone.Shell.ShellTile::Create. 并且您的后台代理位于同一个项目中,或者您的 bg 代理使用位于您创建新图块的项目中的代码。

一些插图:

项目A

 //draws tile 
 public class TileBuilder() {}
 //creates new tile using TileBuilder() 
 public class NewTileManager(TileBuilder tBuilder) 
 {
 }

项目B

  public class ScheduledAgent : ScheduledTaskAgent
  {
      protected override void OnInvoke(ScheduledTask task)
      {
        //update data
        var tBuilder = new TileBuilder(); // oops, you use code from proj A. 
                                          // So, you have it
                                          // as a reference, And MS thinks that 
                                          // your bgAgent uses forbidden API

      }

}
于 2012-10-09T08:21:52.167 回答
0

我知道这是旧的,但我有一个 hacky 解决方案。您不能在后台代理中使用这些方法。如果您真的想这样做,请使用反射。但请确保您实际上并未从后台任务中调用任何该代码,因为这是不允许的。

例如,对于 ShellTile.Create:

 using System.Reflection;

   ...

      Uri NavUri = //your tile's navigation URI
      ShellTileData data = //your tile's data

      object[] parameters = { NavUri, data};
      Type[] types = new[] { typeof(Uri), typeof(ShellTileData)};
      Type type = typeof(ShellTile);
      MethodInfo info = type.GetMethod("Create", types);
      info.Invoke(null, parameters);

这将诱使开发中心接受您的 xap。

于 2014-05-16T22:36:14.427 回答