UWP - ошибка компиляции цепочки инструментов .NET Native

Я разработал простое и небольшое универсальное приложение для Windows, использующее EF7 и SQLite. Он компилируется и работает без сбоев, когда параметр «Компилировать с помощью цепочки инструментов .NET Native» не установлен.

Если я отмечу флажок «Компилировать с помощью цепочки инструментов .NET Native», я получаю следующую ошибку компиляции:

Тип ошибки «System.MarshalByRefObject» не был включен в компиляцию, но был указан в типе «Microsoft.Data.Entity.Design.OperationExecutor». Возможно, здесь отсутствовала сборка.

После этого возникает много других ошибок, но я считаю, что решение этой проблемы также позаботится обо всем остальном.

Кто-нибудь знает, как это решить?


person Daniel    schedule 12.01.2016    source источник
comment
Просто добавьте тип в Default.rd.xml и попробуйте еще раз.   -  person Hans Passant    schedule 12.01.2016
comment
Как мне это сделать и где?   -  person Daniel    schedule 12.01.2016
comment
Да ладно, я начинаю с .NET и C #. Никто не рождается со знанием всего. Поскольку ты знаешь, как это сделать, я считаю, что мне не составит труда рассказать. Я уже набрал в Google и обнаружил, что этот файл находится в папке свойств моего проекта. Дело в том, что я не знаю, как добавить ссылку на System.MarshalByRefObject.   -  person Daniel    schedule 12.01.2016
comment
Точно такая же проблема здесь   -  person AymenDaoudi    schedule 23.03.2016


Ответы (1)


Я предполагаю, что произошло то, что вы используете библиотеку, которая не нацелена на поверхность .NET, доступную для UWP. Поверхность для UWP - это набор API под названием .NET Core, вы можете увидеть источник здесь: http://www.github.com/dotnet/corefx. Скорее всего, вам понадобится более новая версия EF ... хотя я знаю, что у них были некоторые другие проблемы с нашей стратегией предварительной компиляции (см .: https://github.com/aspnet/EntityFramework/issues/3603). Мы продолжаем работать с ними, чтобы разобраться с этим, и надеемся, что EF окажется в отличном месте к обновлению 2 где-то в марте.

Причина, по которой вы видите это только с .NET Native, заключается в том, что компилятор просматривает все ваше приложение во время компиляции, чтобы сгенерировать собственный код для всего, что, по его мнению, вы собираетесь вызвать. Случается заметить, что этот тип недоступен и правильно выдает ошибки. Я предполагаю, что вы на самом деле не называете этот путь кода в своем приложении, потому что это приведет к аналогичной ошибке в CoreCLR ... это произойдет просто во время выполнения, а не во время компиляции.

Если вам действительно не нужен этот тип (и все остальное, что вам нужно, также не нуждается в этом типе и т. Д.), Возможно, удаление этой директивы из вашего приложения позволит шейкеру дерева исключить этот тип из вашего приложения до того, как что-то пойдет наперекосяк:

    <Assembly Name="*Application*" Dynamic="Required All" />

Эта директива приводит к тому, что все типы в вашем приложении и библиотеки, не относящиеся к фреймворку, на которые вы ссылаетесь, укореняются и, следовательно, не могут быть удалены. Наличие этой директивы по умолчанию упрощает наш анализ и избавляет большинство людей от необходимости знать что-либо о нашем механизме анализа. Возможно, удаление этого поможет вам избежать проблемы.

Дайте мне знать, если это сработает или у вас возникнут другие вопросы. Мы всегда рады получать отзывы и оказывать поддержку по адресу [email protected].

person MattWhilden    schedule 12.01.2016
comment
Я удалил ‹Assembly Name = Application Dynamic = Required All /›, и приложение скомпилировалось нормально (после очень долгого ожидания) с установленной опцией Compile with .NET Native tool chain. Проблема в том, что когда я запускаю appcertui.exe, приложение застревает в середине теста. Я думаю, что создам побочный проект без EF и SQlite (возможно, сохраню данные в ini-файле), пока EF не получит более стабильную версию. - person Daniel; 13.01.2016
comment
Если сбой AppCertUI является постоянным, я буду рад передать его человеку здесь, в MS. Вы можете использовать указанный выше адрес электронной почты, чтобы связаться со мной напрямую. - person MattWhilden; 13.01.2016