【发布时间】:2018-05-07 13:59:25
【问题描述】:
我们正在开发一个 UWP LOB 应用,以通过适用于企业的 Windows 应用商店发布(构建目标 >= 1607)。 UWP 应用参考:
- Stubble.Core 通过引用的 nuget(针对 .NET Standard 1.3)
- System.Reflection.TypeExtensions 4.3.0,其中引用了
-
System.Private.Reflection.Extensibility.dll版本4.0.0.0。
应用程序将以调试和发布(通过 .NET 本机编译)模式在本地编译和运行。将.appxupload 上传到 Windows 应用商店时,生成的应用程序会抛出异常:
System.IO.FileNotFoundException:无法加载文件或程序集“System.Private.Reflection.Extensibility,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。 文件名:'System.Private.Reflection.Extensibility,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a' 在 Internal.Reflection.Extensions.NonPortable.PropertyPolicies.GetInheritedMemberInfo(PropertyInfounderlyingMemberInfo,类型 reflectType) 在 Internal.Reflection.Extensions.NonPortable.MemberEnumerator.d__11.MoveNext() 在 System.Collections.Generic.LowLevelList1.InsertRange(Int32 索引,IEnumerable`1 集合) 在 System.Reflection.TypeExtensions.GetMembers(类型类型,对象名称FilterOrAnyName,BindingFlags bindingAttr) 在 System.Reflection.TypeExtensions.GetMembers(类型类型,BindingFlags bindingAttr) 在 Stubble.Core.Settings.RendererSettingsDefaults.GetMemberLookup(Type objectType)
从.appxupload 中提取.appxbundle 并通过PowerShell 侧载程序包时,我可以重现此问题。请注意,.appxupload 中的 .appxbundle 具有 .NET 程序集,因此不会编译为 .NET 本机。
我认为 Windows 应用商店应该执行此任务,但实际上并没有(正如您从上面的堆栈跟踪中看到的那样) - 可能是因为我们正在为 UWP 使用桌面桥功能应用程序。
在搜索 System.Private.Reflection.Extensibility.dll 时,该程序集似乎与 .NET Native 和构建链相关(因为它与 .NET Native nuget 包和 MSBuild 一起提供)。
所以我的问题是:为什么应用程序无法加载程序集(但没有处于调试/发布模式)? System.Reflection.TypeExtensions 是否期望应用程序使用实际在本地工作的 .NET Native 编译?
我试过了:
- 上传用.NET Native编译的
.appxbundle(本店不接受) - 引用不同版本的
Microsoft.NETCore.UniversalWindowsPlatform包(包括 .NET Native 包) - 手动引用私有库(由于重复的程序集引用而产生编译器错误)
- 将
System.Reflection.TypeExtensions升级到4.4 - 为部署创建了一个
.wapproj包装器(问题保持不变) - 添加了绑定重定向,导致应用崩溃
【问题讨论】:
-
有点相关:github.com/NuGet/Home/issues/6201 - 我明天会尝试匹配所有版本(.NET Standard、Target SDK、TypeExtensions、.NET nuget 包)...
标签: c# uwp nuget .net-standard .net-native