2016-06-18 2 views
19

Я хочу:Как я могу создать библиотеку классов .NET Core и ссылаться на нее из проекта .NET 4.6?

  • сделать библиотеку классов, которая определяет некоторые интерфейсы и простые общие вспомогательные классы. Он будет опираться на общие коллекции и IQueryable<T>, но не имеет сторонних зависимостей (ну, JetBrains.Annotations).
  • Уметь ссылаться на эту библиотеку классов всюду (в частности, UWP, net46 и ASP.Net Core RC2)
  • В идеале используйте систему project.json повсюду, хотя я готов пожертвовать тем, что в случае необходимости.
  • Опубликовать готовую библиотеку для питания NuGet и оттуда использовать его в других приложениях

При создании моего проекта библиотеки классов в Visual Studio 2015.2, я нашел Class Library (.NET Core) шаблон, в котором говорится

Шаблон проекта для создания библиотеки классов в виде пакета NuGet, который может ориентироваться на любую платформу

Любая платформа! Блестящий ... Но я не могу заставить его работать. После того, как много пустячный, я в настоящее время имеют следующие project.json (я, вероятно, полностью взломан его сейчас):

{ 
"title": "My Really Useful Class Library", 
"copyright": "Copyright © 2015-16 Tigra Astronomy, all rights reserved", 
"description": "Really neat stuff", 
"language": "en-GB", 
"version": "1.0.0-*", 
"dependencies": { 
    "JetBrains.Annotations": "10.1.4", 
    }, 
"frameworks": { 
    "netstandard1.5": { 
     "imports": "dnxcore50", 
     "dependencies": { 
      "NETStandard.Library": "1.5.0-rc2-24027", 
      "System.Linq.Expressions": "4.0.11-rc2-24027" 
      } 
     } 
    "net46": { 
     "frameworkAssemblies": { 
      "System.Collections": "4.0.*" 
      }, 
     "dependencies": {} 
     } 
    }, 
    "buildOptions": { 
     "xmlDoc": true 
     } 
} 

Следующая вещь, которую я сделал создать свой .NET Framework 4.6 проекта в том же растворе, и попробуйте ссылаться на библиотеку классов. Это позволяет мне добавить ссылку, но я получаю ошибки в построении, неразрешенные символы, R # недоволен и т. Д.

Я думаю, что я не делаю это правильно (не удивительно, действительно, поскольку я возился в темно).

Я прочитал некоторые документы о TFM, фреймворках и библиотеках, но ничто из этого не имеет особого смысла.

Что мне нужно разместить в моей библиотеке классов project.json, чтобы я мог ссылаться на нее из моего приложения .net framework 4.6, а также из приложений UWP и ASP.NET Core RC2? Действительно ли это правильный подход или я начал на неправильной ноге?

+0

Прошу прощения за то, что вы еще не выбрали правильный ответ. Я все еще работаю над несколькими сценариями, обновленными до последних версий RTM и последней инструментами предварительного просмотра. –

+1

Убедитесь, что элемент ' StingyJack

ответ

3

Новые шаблоны проектов/.xproj работают по-другому. Новые библиотеки классов (и шаблоны приложений) создают пакеты nuget, а не простые сборки.

В этом пакете nuget все цели упакованы в него. При этом вы добавляете новый проект так же, как вы добавляете любой другой пакет nuget: вы помещаете nuget в фид нуджера, ссылаетесь на него в Visual Studio, а затем извлекаете его оттуда.

Если у вас нет сервера nuget (пакет Visual Studio Team Services + пакет NuGet, myget, self-hosting), вы также можете поместить пакеты в папку (локальный или сетевой ресурс) и добавить эту папку в качестве источник nuget.

Если это слишком «много», вы также можете создать два проекта в одну папку: A * .csproj и * .xproj. * .csproj нацелен на .NET 4.6 Framework, а * .xproj остается, как вы указали выше, и имеет несколько целей. С помощью этой настройки вы обычно можете ссылаться на проект так, как вы использовали раньше (если они находятся в одном решении), просто добавив ссылку.

+3

Новые шаблоны не создают пакеты nuget по умолчанию. Это было частью DNX/RC1, но шаблоны проектов RC2 не делают это автоматически в VS. Вам нужно будет запустить пакет «dotnet» для создания пакетов. –

35

Прямо сейчас есть два способа создания проектов C#: xproj и csproj. Предполагая, что мы используем project.json для обоих из них, которые по-прежнему работают по-разному для типов проектов - для xproj, project.json содержит все необходимое для создания проекта; для csproj, он содержит только зависимости nuget.

При этом некоторые типы проектов, такие как UWP, не могут быть построены с помощью xproj из-за необходимости создания более сложного трубопровода для сборки, чем то, что поддерживает xproj/project.json. (Кстати, это одна из основных причин для переезда в MSBuild.)

Есть также два способа создания библиотеки классов .NET Standard на основе: вы можете использовать xproj с project.json, как вы сделали, или вы может создать обычный проект «Портативный класс библиотеки» csproj. С помощью VS 2015 Update 3 RC вы можете изменить PCL, чтобы настроить стандартную версию .NET (netstandard1.x вместо профиля PCL, 259 и т. Д.).

Если вы используете библиотеку классов, основанной на csproj, для таргетинга netstandard1.x, при добавлении ссылок на проект все должно работать. Обратите внимание, что в настоящее время UWP поддерживает до netstandard1.4 на основе platform map. Задача состоит в том, чтобы вместо этого использовать проект на основе xproj/project.json. Одной из основных причин использования xproj сегодня является возможность кросс-компиляции между несколькими целевыми структурами. То есть, создайте более одного выхода из вашего проекта. Это отличается от создания одного вывода, на который можно ссылаться из любого совместимого проекта. Оба имеют свои возможности, это зависит от ваших потребностей.

Если вы решили создать библиотеку классов, основанной на xproj, можно использовать ссылку на нее из проекта UWP или любого другого типа совместимого проекта, если диалог «Добавить ссылки» не работает (что он делает 't as csproj ->xproj в значительной степени сломан). Вместо того, чтобы с помощью диалога, измените UWP csproj, чтобы указать на выходе xproj как это:

<Reference Include="System.Reactive.Interfaces"> 
    <HintPath>..\System.Reactive.Interfaces\bin\$(Configuration)\netstandard1.0\System.Reactive.Interfaces.dll</HintPath> 
</Reference> 

выше фрагмент взят из Rx.NET UWP Test Runner here

Если вы это сделаете , вам также нужно будет добавить зависимость сборки от вашего проекта UWP к вашему xproj, поскольку MSBuild/Visual Studio не узнает об этом и не строит вещи в неправильном порядке. Для этого щелкните правой кнопкой мыши по проекту UWP в обозревателе решений, затем выберите «Build Dependencies -> Project Dependencies». В этом диалоговом окне установите флажок для вашего xproj, чтобы убедиться, что VS/MSbuild знает, для его создания.

Здесь вы можете увидеть полное решение Rx.NET, которое включает в себя ссылки xproj->xproj и ссылки UWP ->xproj, о которых я упоминал выше.

+0

Спасибо, Орин, это уже начинает иметь смысл. Я также могу понять, почему MS говорит «дождитесь появления нового инструментария». Возможно, мне стоит попробовать VS2015.3 RC ...Я, вероятно, хочу, чтобы моя библиотека в конечном итоге работала с объектами, основанными на UWP/ARM, в IoT Core, поэтому мое желание использовать xproj. –

+2

Если ваша цель - совместимость с UWP и ASPNet Core 1.0, и вам нужен только один вывод, самым простым подходом, скорее всего, будет 'csproj', который нацелен на« netstandard1.4 ». Для этого вам не нужен «xproj», а ссылки на проект-проект проще. –

+0

На самом деле, я вижу эту ссылку в 2015 году. Обновление 2 ... Является ли 2015.3 RC стоит устанавливать на этом этапе? Поскольку это RC, он должен быть достаточно стабильным ... –

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