Net本机工具链无法解析类型System.Collections.Generic.ISet

时间:2016-10-05 19:27:38

标签: uwp .net-native

我有两个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包,则相同。

1 个答案:

答案 0 :(得分:0)

所以,我终于成功了。它涉及启动另一个库并从原始库移动代码,我抓住了有问题的类。非常无聊,因为Net Native是soooooo slooooow。

罪魁祸首是:

 private async Task Serialize(ISet<Server> data)

这个小函数使用MemoryStream和DataContractJsonSerializer序列化了一个首选项集合。

当我将签名更改为

 private async Task Serialize(HashSet<Server> data)

像魅力一样工作。

希望这有助于将来。