Подтвердить что ты не робот

Общая библиотека классов, потребляемая как .NET Core, так и .Net 4.5.2

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

  • У меня установлен Visual Studio 2015 с установкой Update 3.
  • У меня есть DotNetCore.1.0.0-VS2015Tools.Preview2.exe установлен из здесь.

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

Я кругом кругом, и я не могу сделать библиотеку netstandard1.6 ссылкой на PCL - мне просто сказали, что типы отсутствуют:

Ошибка CS0246: имя типа или пространства имен "SomeTypeHere" не может быть найдено (вам не хватает директивы using или ссылки на сборку?)

PCL с именем "ClassLibrary1" 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.

4b9b3361

Ответ 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>

С помощью жесткого кодирования путь к правильной папке вывода из библиотеки контрактов все в порядке.

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

Ответ 2

Здесь я создаю разделяемые библиотеки, которые могут быть использованы как из проектов .NET Core, так и для проектов .NET 4.5:

SharedLibrary\project.json

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

Библиотека потребляющих (.NET Core) в том же решении ссылается на нее следующим образом:

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

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

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