我尝试允许桌面网桥应用程序从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
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,但我仍然得到相同的例外。
答案 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自动配置器?