Gen*_*ene 5 c# nuget .net-native uwp .net-standard
我们正在开发要通过Windows Store for Business发布的UWP LOB应用程序(构建目标> = 1607)。UWP应用程序参考:
System.Private.Reflection.Extensibility.dll版本4.0.0.0。该应用程序将以调试和发布(通过.NET本机编译)模式在本地编译和运行。将上载到.appxuploadWindows应用商店时,生成的应用程序将引发异常:
System.IO.FileNotFoundException:无法加载文件或程序集“ System.Private.Reflection.Extensibility,版本= 4.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。文件名称:Internal.Reflection.Extensions.NonPortable.PropertyPolicies.GetInheritedMemberInfo(PropertyInfo底层MemberInfo,类型为反射类型)位于System.Private.Reflection.Extensibility,版本= 4.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a。 System.Collections.Generic.LowLevelList1.InsertRange(Int32 index,IEnumerable`1 collection)处的Extensions.NonPortable.MemberEnumerator.d__11.MoveNext()在System.Reflection.TypeExtensions.GetMembers(Int32 index,IEnumerable`1 collection)(Type type,Object nameFilterOrAnyName,BindingFlags bindingAttr) 。反射。
当.appxbundle从中提取.appxupload并通过PowerShell将包侧载时,我可以重现此问题。请注意,.NET程序集.appxbundle内的.appxupload,因此未编译为.NET本机。
我认为Windows应用商店应该执行此任务,但实际上不执行此任务(如您从上面的堆栈跟踪中所看到的)-也许是由于事实,我们在UWP应用中使用了Desktop Bridge功能。
在搜索时System.Private.Reflection.Extensibility.dll,似乎该程序集与.NET Native和构建链相关(因为.NET Native nuget包和MSBuild随附)。
所以我的问题是:为什么应用程序无法加载程序集(但不是在调试/发布模式下)?是否System.Reflection.TypeExtensions希望该应用程序使用可在本地实际运行的.NET Native进行编译?
我试过了:
.appxbundle使用.NET Native编译的文件(商店不接受)Microsoft.NETCore.UniversalWindowsPlatform软件包的不同版本
(包括.NET Native软件包)System.Reflection.TypeExtensions到4.4.wapproj用于部署的包装器(问题保持不变)因此,问题似乎是由 Windows 应用商店未使用 .NET Native 重新编译 AppX 捆绑包引起的。
如果您在本地构建 UWP 应用程序,则...
创建要提交到 Windows 应用商店的应用程序包时,您将获得一个包含 .NET 程序集的 AppX 捆绑包以及对 .NET Native 版本的引用,Windows 应用商店应使用该版本来重新编译应用程序(由Microsoft.NETCore.UniversalWindowsPlatform您正在使用的 nuget 包的版本)。
对于runFullTrust启用了该功能的应用程序,应用商店不会重新编译该应用程序。因此,您将分发一个包含 .NET 程序集并依赖于 .NET Native 运行时(实际上运行得非常好)的 AppX 捆绑包。一旦 CLR 尝试加载 .NET Core 实现的程序集,您就会收到上述错误。此外,与 .NET 本机编译的应用程序相比,您的应用程序会慢得多。
我猜想对于启用的常规 AppX 捆绑包runFullTrust,商店无法决定是否重新编译应用程序,因为这样的包可能包含其他应用程序类型(例如 Windows 窗体或 WPF)。
要解决此问题,请创建“Windows 应用程序打包项目”并添加 UWP 应用程序作为参考。将从该项目生成的 AppX 捆绑包提交到商店。然后,Windows 应用商店将按预期重新编译 .NET 程序集。
有关进一步参考,请参阅无法加载文件或程序集“System.Private.CoreLib...”。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |