【问题标题】:UWP Release build error - Missing assembly and XmlSerializer implicit conversion errorsUWP 发布构建错误 - 缺少程序集和 XmlSerializer 隐式转换错误
【发布时间】:2017-08-15 10:52:21
【问题描述】:

我有一个应用程序,它使用 XmlSerializer 将 UWP 的 BasicGeoposition 列表序列化为文件。 在 X86/64 和 ARM 上为 Debug 构建时一切正常,但是当切换到 Release 构建方案以使用 .NET Native 构建它时,编译器会抛出以下错误:

System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS0012: The type 'Windows.Devices.Geolocation.BasicGeoposition' is defined in an assembly that is not referenced. You must add a reference to assembly 'Windows.Foundation.UniversalApiContract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime'.
error CS0030: Cannot convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [{...}\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [{...}\oobj\x86\Release\ilc\in\System.Collections.dll]'
error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [{...}\oobj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [{...}\oobj\x86\Release\ilc\in\System.Collections.dll]'

堆栈跟踪:

at System.Xml.Serialization.Compiler.Compile(String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Hashtable assemblies, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, XmlMapping[] mappings, CompilerParameters parameters, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, List`1 wcfSerializers, Boolean loadAssembly)
at SerializationAssemblyGenerator.Program.Main(String[] args)

为什么会这样?如何解决?

我正在使用 Visual Studio 2017 CE。

编辑:我已将其范围缩小到 XmlSerializer。当我注释掉代码中的任何 XmlSerializer 内容时,使用 Release 配置一切正常。

完整的编译器输出:

Restoring NuGet packages...
To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'
1>------ Build started: Project: Racepad2, Configuration: Release x86 ------
1>C:\Users\gala\documents\visual studio 2017\Projects\Racepad2\Racepad2\src\Racepad2\Core\Navigation\Parsers.cs(111,46,111,47): warning CS0168: The variable 'e' is declared but never used
1>  Racepad2 -> C:\Users\gala\documents\visual studio 2017\Projects\Racepad2\Racepad2\bin\x86\Release\Racepad2.exe
1>  Starting .NET Native compilation
1>  Processing application code
1>  Computing application closure and generating interop code
1>  Generating serialization code
1>  Compiling interop code
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : System.InvalidOperationException: Unable to generate a temporary class (result=1).
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0012: The type 'Windows.Devices.Geolocation.BasicGeoposition' is defined in an assembly that is not referenced. You must add a reference to assembly 'Windows.Foundation.UniversalApiContract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime'.
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0030: Cannot convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0030: Cannot convert type 'Windows.Devices.Geolocation.BasicGeoposition' to 'Windows.Devices.Geolocation.BasicGeoposition [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0030: Cannot convert type 'Windows.Devices.Geolocation.BasicGeoposition' to 'Windows.Devices.Geolocation.BasicGeoposition [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0030: Cannot convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0030: Cannot convert type 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]' to 'System.Collections.Generic.List<Windows.Devices.Geolocation.BasicGeoposition> [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\System.Collections.dll]'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0029: Cannot implicitly convert type 'Windows.Devices.Geolocation.BasicGeoposition [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]' to 'Windows.Devices.Geolocation.BasicGeoposition'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : error CS0029: Cannot implicitly convert type 'Windows.Devices.Geolocation.BasicGeoposition [c:\Users\gala\Documents\Visual Studio 2017\Projects\Racepad2\Racepad2\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]' to 'Windows.Devices.Geolocation.BasicGeoposition'
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : 
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error :    at System.Xml.Serialization.Compiler.Compile(String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error :    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Hashtable assemblies, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error :    at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, XmlMapping[] mappings, CompilerParameters parameters, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, Boolean loadAssembly)
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error :    at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, String outputDir, IEnumerable`1 referenceDirectories, String intermediateDir, List`1 wcfSerializers, Boolean loadAssembly)
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error :    at SerializationAssemblyGenerator.Program.Main(String[] args)
1>C:\Program Files (x86)\MSBuild\15.0\.Net\.NetNative\15.0.24211\x86\ilc\IlcInternals.targets(936,5): error : Internal compiler error: One or more errors occurred.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

【问题讨论】:

  • 您的Microsoft.NETCore.UniversalWindowsPlatform 版本号是多少?
  • 如何检查?抱歉,我是 Microsoft 生态系统的新手。
  • 我看到你想通了。 ;)
  • 是的,东西已经过时了。当我更新 Visual Studio 时,我怎么没有注意到这一点,我真的不知道。

标签: c# uwp


【解决方案1】:

在查看如何使用 NuGet 将 XmlSerializer 替换为 JSON 解决方案时,我偶然发现了更新部分。原来 NETCore .NET Native 运行时已经过时,版本 5.2.4。更新到 5.4.0 版解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多