使用PushNotificationChannel的Desktop Bridge应用无法找到文件&System; Runtime.WindowsRuntime'

时间:2018-04-26 18:43:49

标签: c# push-notification uwp desktop-bridge

我尝试允许桌面网桥应用程序从Azure通知中心注册WNS通知,但是当我实际使用UWP API时,它会抛出

  

`System.IO.FileNotFoundException:'无法加载文件或程序集&System; Runtime.WindowsRuntime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项。系统找不到指定的文件。'

内部例外

  

FileNotFoundException:无法加载文件或程序集&System; Run.Runtime.WindowsRuntime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项。系统找不到指定的文件。

我在the Visual Studio packaging instructions之后设置了我的解决方案。我的包项目有一个目标版本的Fall Creators Update,最小版本的Anniversary Update,我将它与一个用于WNS支持的Windows开发人员中心项目相关联。我的所有.NET Framework项目都针对v4.6.2。如果我不调用任何UWP API,则打包的应用程序运行完美。

所有WNS代码都在一个类库项目中,该项目由我的桌面应用程序引用(它被添加到包项目的应用程序中)。类库包含Microsoft's tutorial中所有六个文件的引用,三个.winmd文件的Copy Local = False:

  • 来自C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
  • 的三个DLL
  • C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Facade\Windows.winmd
  • C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.UniversalApiContract\5.0.0.0\Windows.Foundation.UniversalApiContract.winmd
  • C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd

实际的推送通知功能在异步方法中:

public namespace WnsClassLibrary
{
    public class WnsChannelService
    {
        private PushNotificationChannel _channel;

        public async Task CreateChannel()
        {
            _channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
        }
    }
}

当桌面应用程序启动时,它会尝试将CreateChannel()作为一种未经处理的异步方法调用,并且在抛出异常时也是如此 - 据我所知,它实际上并不是真的把它放在方法里面。

有谁知道为什么会这样或我如何修复它?我尝试将打包项目的最低版本设置为UWP application: Could not load file or assembly 'System.Runtime.WindowsRuntime, Version=4.0.14.0中建议的Fall Creators Update,但我仍然得到相同的例外。

1 个答案:

答案 0 :(得分:0)

看起来这个问题实际上可能不在Desktop Bridge或UWP API引用中,而只是一个配置错误的程序集绑定重定向。

在尝试将异常显示在较小的解决方案中时,我找到了

@Html.DropDownListFor(m => m.EmpresaId, ViewBag.EmpresaList as SelectList, new { @class = "form-control", @disabled = "disabled" })

在桌面应用和WNS类库的<configuration> <!--[unrelated configuration data...]--> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime.WindowsRuntime" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 文件中。删除app.config元素会使一切运行正常,并将其复制/粘贴到我的再现项目中会使System.IO.FileNotFoundException开始显示。

我无法弄清楚是什么添加了程序集绑定重定向或让它再次发生,但桌面应用最初是.Net 4.5并且需要大量实验才能迁移到.Net 4.6.2,更新所有Nuget包,并实现桌面桥。我最好的猜测是,在此过程中可能会触发一个Nuget自动配置器?