Тип "System.Object" определен в сборке, на которую не ссылаются
Я установил пакет nuget для веб-интерфейса Microsoft ASP.NET Web API для моего проекта и добавил строку в метод WebApiconfig внутри метода Register, как показано в этой ссылке https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/
GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new CompressionHandler(new GZipCompressor(), new DeflateCompressor()));
Также добавлен следующий код в файл web.config
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
Но я получаю сообщение об ошибке
Ошибка 1 Тип "System.Object" определен в сборке, которая не является ссылки. Вы должны добавить ссылку на сборку 'System.Runtime, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a. D:....\App_Start\WebApiConfig.cs
Компилятор жалуется на класс GlobalConfiguration с ошибкой выше. Я использую > NET Framework 4.5
Ответы
Ответ 1
Я получил ту же ошибку и обошел ее, выполнив две вещи.
История:
Я создаю простое приложение ASP.Net для проверки работы с Google API OAuth2.0. Я использовал "nuget" для установки библиотеки Google.Apis.Calendar.v3 (v1.13.1.509)
, и это привело к множеству других DLL, от которых это зависит.
Ошибка:
При компиляции, казалось бы, простого ASP.Net-проекта, ориентированного на "Framework 4.5" на Visual Studio 2015 для Web (Express). Ошибка показала себя двумя способами:
Я изначально скомпилировал код, используя команду Build Ctrl+F5
. Затем я получил ошибку сборки, но без записи на вкладке "Ошибка", которая обычно указывала бы на строку исходного кода. (Проект просто прекратил строительство). Вывод:
------ Build started: Project: oauth2.pylogen.com, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/App_Code/'.
E:\Projects\oauth2.pylogen.com\App_Code\Google.Api.Pylogen\FlowMetadata.cs(26,13): error
CS0012: The type 'System.Object' is defined in an assembly that is not referenced. You
must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'.
Validation Complete
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Затем я приступил к установке dotNet Framework 4.6.1 Developer Pack (новейшая версия, которая не является предварительным просмотром).
Затем я перезапустил VS 2015 для Интернета и снова получил сборку. На этот раз я получил запись на вкладке "Ошибка", которая указывала на строку-источник:
flowInit.Scopes = new string[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar };
Когда я прокомментировал эту строку, проект будет создан. Я почти ничего не мог сделать в этой строке, но я просто хотел показать неясность ошибки!
Решение:
После установки Framework 4.6.1 Developer Pack. Я также добавил эту строку в Web.Config:
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
После этого мой проект полностью строится. Мое предположение было бы в том, что Google ссылается на более раннюю версию System.Runtime.dll(хотя их детали пакета Nuget показывают, что целевая структура - 4.5).
Ответ 2
Это было немного сложно, потому что я также попробовал сначала добавить ссылку на сборку в файл корневого файла Web.config, что в моем случае не помогло. После этого я сделал то же самое для файла Web.config, который находится в папке Views для моего проекта ASP.NET MVC: Views\Web.config
<system.web>
<compilation>
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
</system.web>
Вышеописанное.
На самом деле у меня уже была одна ссылка для сборки System.Web.Mvc
там раньше, поэтому heres полный список для моего проекта ASP.NET MVC.
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
</system.web>
Ответ 3
Возможно, что другие файлы из папки .NET Facades могут также вызывают одну и ту же проблему и будут исправлены с использованием того же подхода как указано выше для каждого файла.
Вы можете найти файлы, о которых идет речь, в следующей папке (в зависимости от целевой среды .NET), примеры:
.NET 4.5.1 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades
.NET 4.5 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades
Извлечен из http://www.lyalin.com/2014/04/25/the-type-system-object-is-defined-in-an-assembly-that-is-not-reference-mvc-pcl-issue/
Ответ 4
Я исправил эту проблему, обновив компилятор С# до Roslyn.
Вы можете сделать это, перейдя в Project
- Enable latest C# and VB features for ASP.NET Project
.
Ответ 5
Установка и удаление System.ValueTuple через Nuget оставил файл System.ValueTyple.dll
в моей папке bin. Удаление его решило проблему для меня.