无法加载文件或程序集“System.Private.CoreLib...”

Posted

技术标签:

【中文标题】无法加载文件或程序集“System.Private.CoreLib...”【英文标题】:Could not load file or assembly 'System.Private.CoreLib...' 【发布时间】:2018-10-05 06:09:28 【问题描述】:

我有一个针对 .net 标准 1.4 的 Xamarin.Forms 应用程序。在最低版本为 14393(和目标为 16299)的 UWP 应用程序上,我从 Microsoft Store 获得以下异常(尽管在我的计算机上,即使从 appxbundle 文件运行良好):

注意要点:

    错误发生在Xamarin.Forms.Forms.Init(e); in OnLaunched。 错误本身是Could not load file or assembly 'System.Private.CoreLib...'

System.IO.FileNotFoundException:无法加载文件或程序集 'System.Private.CoreLib,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。这 系统找不到指定的文件。文件名: 'System.Private.CoreLib,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a' 在 System.ModuleHandle.ResolveType(RuntimeModule 模块,Int32 typeToken,IntPtr* typeInstArgs,Int32 typeInstCount,IntPtr* methodInstArgs、Int32 methodInstCount、ObjectHandleOnStack 类型) 在 System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule 模块,Int32 typeToken,RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext) 在 System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken,Type[] genericTypeArguments,Type[] 通用方法参数) 在 System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord、MetadataImport 范围、Assembly 和 lastAptcaOkAssembly、 RuntimeModule 装饰模块,MetadataToken 装饰令牌, 运行时类型 属性过滤器类型,布尔型 mustBeInheritable,对象[] 属性、IList 派生属性、RuntimeType& 属性类型、IRuntimeMethodInfo& ctor、Boolean& ctorHasParameters、Boolean& isVarArg) 在 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule 装饰模块,Int32 装饰元数据令牌,Int32 pcaCount, 运行时类型 attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent) 在 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly 程序集,运行时类型 caType) 在 System.Reflection.RuntimeAssembly.GetCustomAttributes(类型 属性类型,布尔继承) 在 System.Attribute.GetCustomAttributes(程序集元素,类型 属性类型,布尔继承) 在 Xamarin.Forms.Internals.Registrar.RegisterAll(类型 [] 属性类型) 在 Xamarin.Forms.Forms.Init(IActivatedEventArgs launchActivatedEventArgs,IEnumerable`1 rendererAssemblies) 在 PasswordManager.UWP.App.d__1.MoveNext()

任何想法这可能意味着什么,以及如何解决它?

【问题讨论】:

您的应用程序是否使用桌面扩展组件,如果是,您是否使用 VS Packaging Project 来创建商店包?该错误表明您提交了一个无效的包。 @StefanWickMSFT 干得好!是的,确实,我有一个桌面扩展。但我没有使用打包项目创建项目,因为它不是 Centennial 应用程序。这是一个 Xamarin.Forms 应用程序。不过,我已经包含了一个 Win32 (Winforms) 应用程序,该应用程序使用 await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(); 从应用程序调用(不是在启动时,仅通过用户操作)。我已经获得百年团队的许可,Win32 exe在我的电脑上调用正常。 【参考方案1】:

鉴于您的包同时具有 UWP 和桌面组件,您将需要使用 VS 打包项目来创建 .appxupload 文件以进行商店提交。

有关更多信息/示例,请查看此处:

https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/

https://blogs.windows.com/buildingapps/2017/12/04/extend-desktop-application-windows-10-features-using-new-visual-studio-application-packaging-project/(参见示例 #3)

应用商店不再接受包含未使用正确打包项目创建的混合 UWP 和桌面 .NET 二进制文件的包。这是为了确保 UWP 二进制文件在云中获得正确的 .NET 本机编译(这不适用于桌面 .NET 二进制文件)。在您的情况下,发生的事情是商店中跳过了 .NET 本机编译,导致包无效,因为声明的依赖项与包的内容不匹配。我们应该在这里改进我​​们的错误检测,以便我们在提交时立即通知您您的包不好,需要更多的工作。

如果你的 Win32 EXE 没有内置在 VS 中,而你只是想在你的 UWP 项目中包含二进制文件,你仍然应该使用 Packaging 项目。确保将 Win32 EXE 放入包的子文件夹中。有关此类项目结构,请参见下面的屏幕截图。

【讨论】:

我正在阅读您的博文。但它似乎已经和我所拥有的不同了。我编译了我的 Win32 代码并将 exe 放入 UWP 项目中。我还需要打包项目吗? (Win32 exe 是为 .net 4.6 构建的,因此可以在任何 Windows 10 版本上运行。) 看起来这些链接是指我需要一起构建两个项目的情况。 我已经更新了我的答案以涵盖您的具体情况。 感谢您的坚持。我会试试的。 the .NET native compile was skipped in the Store - 我在 Visual Studio 中创建包时不会发生这种情况吗?

以上是关于无法加载文件或程序集“System.Private.CoreLib...”的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集,但已加载

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一