Невозможно построить UWP в режиме релиза

У меня есть проект, который хорошо работает в режиме отладки, но совсем не работает в режиме выпуска.

Решение содержит 3 проекта

Общий проект

проект Windows Phone 8.1

Проект UWP

здесь вывод ошибки

 2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : System.InvalidOperationException: Unable to generate a temporary class (result=1).
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : error CS0012: The type 'Windows.UI.Xaml.Visibility' is defined in an assembly that is not referenced. You must add a reference to assembly 'Windows.Foundation.UniversalApiContract, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime'.
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : error CS0030: Cannot convert type 'Windows.UI.Xaml.Visibility' to 'Windows.UI.Xaml.Visibility [e:\MyApp\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]'
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : error CS0029: Cannot implicitly convert type 'Windows.UI.Xaml.Visibility [e:\MyApp\obj\x86\Release\ilc\in\WinMetadata\Windows.winmd]' to 'Windows.UI.Xaml.Visibility'
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : 
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error :    at System.Xml.Serialization.Compiler.Compile(String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence, String outputDir, String intermediateDir, Boolean loadAssembly)
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error :    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Hashtable assemblies, String outputDir, String intermediateDir, Boolean loadAssembly)
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error :    at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, XmlMapping[] mappings, CompilerParameters parameters, String outputDir, String intermediateDir, Boolean loadAssembly)
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error :    at System.Xml.Serialization.XmlSerializer.GenerateSerializer(Type[] types, String outputDir, String intermediateDir, List`1 wcfSerializers, Boolean loadAssembly)
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error :    at SerializationAssemblyGenerator.Program.Main(String[] args)
2>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x86\ilc\IlcInternals.targets(887,5): error : Internal compiler error: One or more errors occurred.

Пакеты Nuget, которые я использую,

    "GoogleAnalyticsSDK": "1.2.12",
    "HockeySDK.UWP": "4.0.0",
    "HtmlAgilityPack": "1.4.9",
    "Microsoft.ApplicationInsights": "1.0.0",
    "Microsoft.ApplicationInsights.PersistenceChannel": "1.0.0",
    "Microsoft.ApplicationInsights.WindowsApps": "1.0.0",
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0",
    "MvvmLightLibs": "5.1.1",
    "Newtonsoft.Json": "8.0.3",
    "WriteableBitmapEx": "1.5.0"

Обновить

Я пытался добавить Windows.Foundation.UniversalApiContract вручную, но получил это

Обновление 2

После того, как я снял галочку с функции цепочки инструментов Compile with .Net Native, она заработала.

Есть ли способ построить его с помощью цепочки инструментов .net?

 Mostafa El-Abady08 июн. 2016 г., 09:49
Нет, это должно быть добавлено автоматически, проверьте обновленный вопрос, пожалуйста.
 IInspectable07 июн. 2016 г., 15:22
«Необходимо добавить ссылку на сборку« Windows.Foundation.UniversalApiContract, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = ноль, ContentType = WindowsRuntime »» - Кажется актуальным.
 Mostafa El-Abady14 июн. 2016 г., 10:58
Да, у меня установлены последние обновления VS.
 Hans Passant08 июн. 2016 г., 10:53
Вы не можете доверять сообщениям об ошибках, которые вы получаете после этого первого неприятного несчастного случая. Устранение неполадок с компилятором .NET Native выходит далеко за рамки вашего вопроса, для этого требуется кто-то, кто имеет доступ к вашему коду и достаточно знает о компиляторе, чтобы либо найти ошибку в этом компиляторе, либо предложить обходной путь в вашем коде. Найти его можно только в Службе поддержки Microsoft.
 Unni Ravindranathan14 июн. 2016 г., 05:17
Был устранен ряд проблем с .NET Native, а также часть обновления 2 для Visual Studio 2015. Не могли бы вы подтвердить, установлены ли последние обновления VS? Вы также можете связаться напрямую с командой по адресу [email protected], и мы будем рады помочь (поскольку, скорее всего, мы не сможем воспроизвести проблему только с этими шагами).

Ответы на вопрос(1)

Решение Вопроса

скажем, Foo, ссылающийся на тип winmd Windows.UI.Xaml.Visibility, см. Ниже.

    public class Foo
    {
        public Windows.UI.Xaml.Visibility Visibility;
    }

Я получил ту же ошибку во время компиляции, когда попытался сериализовать экземпляр типа Foo с помощью XmlSerializer. Кажется, что инструменты .Net Native имеют проблемы с генерацией XmlSerializer для таких типов, как Foo.

Вот мой обходной путь. Я создал свой собственный тип видимости, MyVisibility, и изменил существующее поле видимости наполучить только собственность (чтобы XmlSerializer не сериализовал свойство).

    public class Foo
    {
        public Windows.UI.Xaml.Visibility Visibility
        {
            get
            {
                return (Visibility)myVisibility;
            }
        }

        public MyVisibility myVisibility;
    }

    public enum MyVisibility
    {
        Visible = 0,
        Collapsed = 1
    }

Вот мой тестовый код для сериализации экземпляра Foo,

    public static void Test()
    {
        var foo = new Foo();
        foo.myVisibility = MyVisibility.Collapsed;            
        var serializer = new XmlSerializer(typeof(Foo));
        using (var stream = new MemoryStream())
        {
            serializer.Serialize(stream, foo);
            stream.Position = 0;
            var foo1 = (Foo)serializer.Deserialize(stream);
            Assert.True(foo.Visibility == foo1.Visibility);
        }
    }

Надеюсь это поможет.

 Mostafa El-Abady19 июн. 2016 г., 13:32
Спасибо! Это работает!

Ваш ответ на вопрос