2016-07-07 2 views
1

Полная ошибка:Тип «Объект» определен в сборке, которая не ссылается с .Net Основной проект

Тип «Объект» определен в сборке, которая не ссылается. Вы должны добавить ссылку на сборку 'mscorlib, версия = 4.0.0.0, ...

Я пытаюсь создать экземпляр MongoClient, который все еще находится в сборке .Net 4.5, как это:

var client = new MongoDB.Driver.MongoClient(@"mongodb://localhost:27017/"); 
if (client == null) 
{ 
    return; 
} 

Ошибка построения на линии client == null.

Мой project.json выглядит следующим образом:

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "MongoDB.Driver": "2.2.4", 
    "MongoDB.Driver.Core": "2.2.4", 
    "MongoDB.Bson": "2.2.4" 
    }, 

    "frameworks": { 
    "netstandard1.6": { 
     "imports": "net46" 
    } 
    } 
} 

My VM имеет Win10 в качестве ОС, поэтому я установил только .Net 46X.

Я удалил импорт dnxcore50 и заменил его на полный импорт net46. Я делаю что-то неправильно?

+0

Действительно ли вы установили ядро ​​.net? –

+0

Да. Я могу создать и запустить шаблон Mvc Asp.Net Core по умолчанию. Восстановление пакета также успешное. – tverboon

+0

У вас есть 'System' в вашем проекте? Ссылки? – user3185569

ответ

4

Я решил это, удалив каркас netstandard1.6 и заменив его на «net46». У меня создалось впечатление, что с netstandard1.6 я мог бы импортировать фреймворк .Net 4.6 и удалить импорт dnxcore50, а затем он должен работать с полной библиотекой, как указано здесь: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#mapping-the-net-platform-standard-to-platforms

На данный момент у меня есть изменил мои проекты, чтобы нацелить только полную инфраструктуру .Net. Когда доступен драйвер .Net Core Mongo, я могу настроить его как netcoreapp.

Мой project.json Сейчас:

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "MongoDB.Driver": "2.2.4", 
    "MongoDB.Driver.Core": "2.2.4", 
    "MongoDB.Bson": "2.2.4" 
    }, 

    "frameworks": { 
    "net46": { } 
    } 
} 

Благодаря @Nick Акоста указал мне на: A common class library consumed by both .NET Core and .Net 4.5.2

Update

Я получил ответ от Эрика Mellino на CoreFX Repo: https://github.com/dotnet/corefx/issues/9885#issuecomment-231194545

Ваша первая версия:

"рамки": { "netstandard1.6": { "импорт": "net46" }}

в основном говорит: «Постройте мне библиотека ориентируетесь netstandard1.6 , , но также позвольте мне ссылаться на материал, созданный для net46, даже если это не совместимый. " Оказывается, сборка несовместима, поэтому вы не можете скомпилировать . Проблема в том, что MongoClient ссылается на тип System.Object , который находится в файле mscorlib.dll. NETStandard.App, при настройке netstandard1.6, будет вытаскивать файл System.Runtime.dll , который ссылается на тип System.Object, который находится в 0x1000.html в System.Runtime.dll. Нет mscorlib facade, который мог бы свести это несоответствие, чтобы получить ошибки компиляции.

Если вы создаете .NET Framework, используйте второе приложение, т. Е.

"рамки": {"net46": {},}.

Если вы хотите построить для .NET Core, вам понадобится версия MongoClient, которая совместима с netstandard. Тогда это может быть , используемое в приложении .NET Framework.