代码之家  ›  专栏  ›  技术社区  ›  Katja

具有PushNotificationChannel的桌面网桥应用程序找不到文件“系统”。运行时。WindowsRuntime'

  •  1
  • Katja  · 技术社区  · 7 年前

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

    `系统。IO。FileNotFoundException:“无法加载文件或程序集”系统。运行时。WindowsRuntime,版本=4.0.10.0,区域性=中性,PublicKeyToken=b77a5c561934e089'或其依赖项之一。系统找不到指定的文件。'

    内部例外为

    FileNotFoundException:无法加载文件或程序集的系统。运行时。WindowsRuntime,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089'或其依赖项之一。系统找不到指定的文件。

    我设置了以下解决方案 the Visual Studio packaging instructions 。我的软件包项目有秋季创建者更新的目标版本,周年纪念更新的最低版本,我将其与Windows开发中心项目关联,以获得WNS支持。我的一切。NET Framework项目的目标是v4。6.2。如果我不调用任何UWP API,那么打包的应用程序可以完美运行。

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

    • 来自的三个DLL C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
    • 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() 作为一个未等待的异步方法,此时会引发异常-据我所知,它甚至不会在方法内部发生。

    有人知道为什么会发生这种情况,或者我如何解决它吗?我尝试将打包项目的最低版本设置为Fall Creators Update,如中所示 UWP application: Could not load file or assembly 'System.Runtime.WindowsRuntime, Version=4.0.14.0 ,但我仍然得到相同的异常。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Katja    7 年前

    看起来问题实际上可能不在桌面网桥或UWP API引用中,而只是配置错误的程序集绑定重定向。

    在尝试将异常显示在较小的解决方案中时,我发现

    <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 桌面应用程序和WNS类库的文件。删除该 <runtime> 元素使一切正常运行,将其复制/粘贴到我的复制项目中使系统正常运行。IO。FileNotFoundException开始显示。

    我不知道是什么添加了程序集绑定重定向或使其再次发生,但桌面应用程序最初是。Net 4.5,并进行了大量的实验才能迁移到。Net 4.6.2,更新所有Nuget包,并实现桌面网桥。我最好的猜测是,可能有什么东西触发了Nuget自动配置程序?