Net 本机工具链无法解析类型 System.Collections.Generic.ISet
Net native toolchain cannot resolve type System.Collections.Generic.ISet
我有两个 UWP 项目的解决方案。一个是具有共享代码的库,另一个是引用该库的常规 UWP 应用程序。
我已经在调试模式下成功开发了应用程序 运行。现在我必须把它打包到商店,这就是 NET 给我带来麻烦的地方。
当我在发布模式下编译时,出现以下错误
C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x64\ilc\IlcInternals.targets(936,5): error :
System.TypeLoadException: Could not resolve type 'System.Collections.Generic.ISet`1'.
in System.TypeNameParser.ResolveType(Assembly assembly, String[] names, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError)
in System.Reflection.Adds.TypeNameParser.ParseTypeName(ITypeUniverse universe, Module module, String input, Boolean throwOnError)
in Microsoft.MetadataReader.MetadataExtensionsPolicy20.TryTypeForwardResolution(MetadataOnlyAssembly assembly, String fullname, Boolean ignoreCase)
in Microsoft.MetadataReader.MetadataOnlyAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
in Microsoft.MetadataReader.MetadataOnlyAssembly.GetType(String name, Boolean throwOnError)
in SerializationAssemblyGenerator.Program.TraverseTypes(GeneratorSettings settings, Dictionary`2& dataContracts, Dictionary`2& jsonDataContracts, List`1& xmlSerializerTypes)
in SerializationAssemblyGenerator.Program.Main(String[] args)
我经常使用 ISet,所以很自然地会引用它。我安装了 Microsoft.NETCore.UniversalWindowsPlatform 包版本 5.2.2,所以我假设它在这里可用。我尝试降级到 5.1 版,但出现同样的错误。如果我安装 System.Collections 包也一样。
所以,我终于成功了。它涉及启动另一个库并从原始库中移动代码,但我发现了有问题的 class。非常无聊,因为 Net Native 太懒了。
罪魁祸首是:
private async Task Serialize(ISet<Server> data)
这个小函数使用 MemoryStream 和 DataContractJsonSerializer 序列化了一个首选项集合。
当我把签名改成
private async Task Serialize(HashSet<Server> data)
工作得很好。
希望这对以后的人有所帮助。
我有两个 UWP 项目的解决方案。一个是具有共享代码的库,另一个是引用该库的常规 UWP 应用程序。
我已经在调试模式下成功开发了应用程序 运行。现在我必须把它打包到商店,这就是 NET 给我带来麻烦的地方。
当我在发布模式下编译时,出现以下错误
C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x64\ilc\IlcInternals.targets(936,5): error :
System.TypeLoadException: Could not resolve type 'System.Collections.Generic.ISet`1'.
in System.TypeNameParser.ResolveType(Assembly assembly, String[] names, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
in System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError)
in System.Reflection.Adds.TypeNameParser.ParseTypeName(ITypeUniverse universe, Module module, String input, Boolean throwOnError)
in Microsoft.MetadataReader.MetadataExtensionsPolicy20.TryTypeForwardResolution(MetadataOnlyAssembly assembly, String fullname, Boolean ignoreCase)
in Microsoft.MetadataReader.MetadataOnlyAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
in Microsoft.MetadataReader.MetadataOnlyAssembly.GetType(String name, Boolean throwOnError)
in SerializationAssemblyGenerator.Program.TraverseTypes(GeneratorSettings settings, Dictionary`2& dataContracts, Dictionary`2& jsonDataContracts, List`1& xmlSerializerTypes)
in SerializationAssemblyGenerator.Program.Main(String[] args)
我经常使用 ISet,所以很自然地会引用它。我安装了 Microsoft.NETCore.UniversalWindowsPlatform 包版本 5.2.2,所以我假设它在这里可用。我尝试降级到 5.1 版,但出现同样的错误。如果我安装 System.Collections 包也一样。
所以,我终于成功了。它涉及启动另一个库并从原始库中移动代码,但我发现了有问题的 class。非常无聊,因为 Net Native 太懒了。
罪魁祸首是:
private async Task Serialize(ISet<Server> data)
这个小函数使用 MemoryStream 和 DataContractJsonSerializer 序列化了一个首选项集合。
当我把签名改成
private async Task Serialize(HashSet<Server> data)
工作得很好。
希望这对以后的人有所帮助。