【发布时间】: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 时,我怎么没有注意到这一点,我真的不知道。