Компиляция преобразования: Тип "Объект" определен в сборке, на которую не ссылаются

Я вношу некоторые изменения в asp.Net MVC5 webapp, в котором я использовал typelite для создания определений .ts из классов С# (очень удобно). По какой-то причине я получил эту ошибку при выполнении T4:

Компиляция преобразования: Тип "Объект" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку 'mscorlib, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e, Retargetable = Yes'.

и это предупреждение:

Компиляция преобразования: Предполагая ссылку на сборку 'mscorlib, Version = 1.0.3300.0, Culture = neutral, PublicKeyToken = b77a5c561934e089', используемый 'EnvDTE', соответствует идентификатору 'mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' из 'mscorlib', вам может потребоваться предоставить среду выполнения Mair.Tracking.Web

Я предполагаю, что это связано с версией EnvDTE, используемой TypeLite, и используется ссылка на mscorlib EnvDTE. Должен ли я добавить bindRedirect в web.config?

Я использую VS2015 с Update2 CTP.

Ответ 1

Я могу подтвердить, что портативные библиотеки классов в сочетании с шаблонами T4 вызывают эту проблему в обновлении Visual Studio 2015 2. Я не смог найти лучшее решение, а затем перенацелил TypeLITE на полную платформу .NET.

Из версии 1.8.0 пакет TypeLITE nuget содержит копию библиотеки, предназначенную для полной .NET-среды. Если ваш проект нацелен на полную платформу .NET, правильная сборка TypeLITE будет собрана во время установки, и все будет хорошо работать в обновлении Visual Studio 2015 2. К сожалению, если ваш проект нацелен на PCL, вам не повезло с обновлением Visual Studio 2015 2. Я ищет лучшее решение.

Ответ 2

Благодаря Ian Yates для открытия элемента Connect.

Microsoft повторно выпустила KB3151378 от 4 мая 2016 года. Я могу подтвердить, что это обновление устраняет проблему, когда T4 шаблоны используются с файлами EDMX. К сожалению, я не использую TypeLite, поэтому я не могу подтвердить, что он относится к проблеме OP, хотя я бы подозревал, что это так.

На странице KB:

Проблема 6:

В шаблонах T4 возникают ошибки, когда вы ссылаетесь на сборку, созданную для версии .NET Framework, которая отличается от настольной (полной) структуры. Например, ошибки возникают, когда вы обращаетесь к портативным библиотекам.

Ответ 3

Похоже, это должно быть исправлено KB3151378.

Примечания для версии 14.0.25130.0:

Проблема 6

В шаблонах T4 возникают ошибки, когда вы ссылаетесь на сборку, созданную для версии .NET Framework, которая отличается от настольной (полной) структуры. Например, ошибки возникают, когда вы ссылаетесь на портативные библиотеки.

Ответ 4

В частности, для TypeLite я открыл свою копию (довольно устаревшую, но я поменял ее в соответствии с моими потребностями) и остановил ее как переносную библиотеку. Это было сделано после шагов fooobar.com/questions/249888/.... Теперь, когда это не переносная библиотека, я могу снова запустить свой шаблон T4.

У меня есть много других шаблонов T4 в моем решении, используя ImmutableObjectGraph (поиск GitHub), и они отлично работали, несмотря на то, что он также использует портативную библиотеку. Я не слишком зациклился на специфике, но я узнал, что mscorlib 2.0.5.0 связан с портативными библиотеками и т.д., И нам действительно не нужно, чтобы TypeLite был переносимым.

Надеюсь, что это поможет другим.

Также существует проблема открытого подключения в https://blogs.msdn.microsoft.com/visualstudio/2016/03/03/visual-studio-2015-update-2-rc/, так как это все еще регрессия в обновлении 2 VS2015.

Ответ 5

У меня была полная версия установленного TypeLite 1.5.1 (Regular WebApplication.Net Полная версия 4.5.1), а простое обновление до версии 1.8.1 помогло решить проблему. Поэтому я должен сказать, что VS 2015 Update2 RC и Update2 RTM не работают ни с полной версией TypeLite, ни с PORTABLE (да, версия 1.5.1 уже имеет переносимую версию)