2016-07-06 1 views
13

Я довольно новичок в .NET Core, но создал рабочий сайт Asp.Net Core WebAPI - теперь хочу поделиться некоторым кодом с другим проект ...Общая библиотека классов, потребляемая как .NET Core, так и .Net 4.5.2

  • У меня есть Visual Studio 2015 с обновлением 3.
  • У меня есть DotNetCore.1.0.0-VS2015Tools.Preview2.exe, установленный с here.

Я хотел бы создать общую библиотеку (PCL), которая может быть использована двумя другими библиотеками - она ​​содержит только примитивные классы/интерфейсы без каких-либо других зависимостей. Одна из потребляющих библиотек - новый проект ванили, ориентированный на «netstandard1.6», другой - старая клиентская библиотека, которая нацелена на .NET 3.5.2 (я могу обновить это до 4.6.x, если нужно).

Я был по кругу, и я не могу сделать netstandard1.6 ссылки на библиотеку ЗКСА - Я просто сказал, что типа не хватает:

CS0246 Ошибки: типа или пространства имен имени «SomeTypeHere» не может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?)

в PCL с именем «ClassLibrary1» 's project.json автоматически генерируется как:

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0" 
    }, 
    "frameworks": { 
    "netstandard1.1": {} 
    } 
} 

Моя библиотека потребляя project.json является:

{ 
    "version": "1.0.0-*", 
    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Newtonsoft.Json": "9.0.1" 
    }, 
    "frameworks": { 
    "netstandard1.6": { 
     "dependencies": { 
     "ClassLibrary1": { 
      "target": "project" 
     } 
     } 
    } 
    } 
} 

Как я могу сделать эту работу?

EDIT 07/07/2016:

Я сделал следующее решение доступное, которое демонстрирует мою установку: https://github.com/JonnyWideFoot/netcore-prototype См ExperimentClient :: GetLocationAsync для того, где я хотел бы использовать контракты библиотеки в .Net 4.5.2/4.6.x Клиент.

+0

FYI - они больше не называются PCL с появлением .NET Core :) –

ответ

1

Единственный способ, которым я нашел, чтобы сделать эту работу, - это взломать ссылку.csproj файл библиотека клиента: https://github.com/JonnyWideFoot/netcore-prototype/blob/master/src/JE.API.Experiment.Client/JE.API.Experiment.Client.csproj

<Reference Include="JE.Api.Experiment.Contract, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\JE.Api.Experiment.Contract\bin\$(Configuration)\net452\JE.Api.Experiment.Contract.dll</HintPath> </Reference>

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

... думал, что это может быть ошибкой в ​​визуальной студии.

4

Вот как я создавать общие библиотеки, которые могут потребляться от обоих проектов .NET Ключевых и .NET 4.5 проектов:

SharedLibrary \ project.json

"dependencies": { }, 
"frameworks": { 
    "net45": { }, 
    "netstandard1.1": { 
    "dependencies": { 
     "NETStandard.Library": "1.6.0" 
    } 
    } 
}, 
"version": "1.0.0" 

огнь (.NET ядра) библиотеки в том же растворе ссылается это следующим образом:

"dependencies": { 
    "SharedLibrary": { 
    "target": "project", 
    "version": "1.0.0" 
    } 
}, 
"frameworks": { 
    "netstandard1.1": { } 
    } 
} 

огня .NET 4.5 проекта с использованием project.json будет выглядеть так же, за исключением net45 в разделе фреймворков. Установка в проект с .NET .NET 4.также работает, если создается пакет NuGet для SharedLibrary.

В соответствии с .NET Platform Standard docs, просто таргетинг на netstandard1.1 должен позволить установить общую библиотеку в проектах .NET 4.5+. Я столкнулся с такими странными проблемами, но, возможно, это был результат бета-инструментария.

+0

Спасибо! - Сейчас у меня есть «сетевая сторона», но все еще возникают проблемы с ссылкой на проект Shared от клиента .Net 4.5.2. { "зависимости": {}, "рамок": { "net452": {}} , "версия": "1.0.0" } Я ссылку на проект в Visual Studio (как библиотеки находятся в одном решении), и я получаю «error CS0234». Однако общая библиотека HAS создала dll .Net 4.5.2. странно, если я ссылаюсь на это напрямую, все работает. –

+0

При ссылке на проект, а не на DLL, путь hintpath в окне свойств верен: \ ClientLib \ bin \ Debug \ net452 \ SharedLib.dll Все очень странно ... Как M $ сделал этот материал таким сложным , .Net был простым :-( –

+0

@JonRea: уточнить - ссылаетесь ли вы на общий проект из проекта .NET 4.5.2, основанного на 'project.json' или на основе' csproj'? –

Смежные вопросы