Обновление: это относится к устаревшему набору основных инструментов .net, созданных на основе project.json, этот вопрос и его ответы имеют очень ограниченную полезность в текущих наборах основных инструментов .net, таких как Visual Studio 2017+.
Используя Visual Studio 2015, обновление 3, я пытаюсь выяснить существующие ограничения, которые не позволяют мне сделать следующее:
Для одной кодовой базы C# скомпилируйте полную версию платформы .net и версию PCL, а также основную библиотеку классов .net из одних и тех же источников.
Каталог решения
solutiondir\
будет содержать каталогsrc\
, который содержитprojectdir\
(Solutiondir\src\projectdir
).Projectdir
будет содержать библиотеку классов HelloWorldPCL, созданную как проектclassic .net PCL
, а также с другими целевыми платформами.Из того же
Projectdir
будет скомпилирован тот же HelloWorldPCL для проекта.net 4.6
.Из того же
Projectdir
будет скомпилирован тот же HelloWorldPCL для.net core
.Все выходные сборки выше будут иметь общий доступ к одному набору кода C#, который может иметь некоторые
#if DOTNET
,#if NET46
и#if PCL
условные определения для обработки вещей, недоступных в различных фреймворках/средах.
Пока я могу сделать большую часть из вышеперечисленного, но когда я пытаюсь, чтобы Projectdir
содержал артефакт .net core
, такой как project.json
или HelloWorldCore.xproj
, IDE выдает мне много ошибок, если я пытаюсь создать отдельные проекты .csproj
и .xproj
в одной папке, так что кажется, это не правильный путь.
С рабочим проектом .csproj
, когда я добавляю .xproj
и project.json
на диск, но мы не добавляли их в само решение, они просто лежат на диске рядом с реальными исходными кодами проекта, я получаю ошибку восстановления пакета Nuget, которая можно только удалить, удалив файл project.json
, поэтому очевидно, что невозможно иметь .csproj
в каталоге проекта, а также иметь папку project.json
. Необходимо выбрать между режимом project.json
(стиль проекта .net core
) и режимом .csproj
(классический стиль проекта C#).
Я построил «сломанную» кодовую базу, которая демонстрирует невозможность использования папки, содержащей как .csproj
, так и project.json
, а затем попытки собрать проект csproj
и project.json
без их вмешательства:
https://bitbucket.org/wpostma/helloworldcoreandpcl
Вопрос: есть ли КАКОЙ-ЛИБО способ собрать проект из одного набора исходных файлов C# и использовать в качестве целей полную сборку .net 4.6
, а также собственную библиотеку классов .net core
, а также сборку PCL который может быть нацелен на какой-либо конкретный профиль .net?
Возражение: вы можете справедливо спросить: «Разве вы не должны просто использовать один PCL и покончить с ним, забыв о нацеливании на полный .net или о создании отдельной dll библиотеки классов .net core
?». Возможно, если бы код можно было собрать один раз, из одного источника, без каких-либо условных определений и без каких-либо различий в функциональности, и если бы ограничения, налагаемые профилем PCL с наименьшим общим знаменателем, подходили к профилю netstandard было достаточно, вы могли. Но как насчет случаев, когда это даже невозможно?
Должен ли у нас быть какой-то сложный процесс сборки, в котором мы либо копируем файлы проекта, либо перемещаем исходный код, чтобы достичь единственного .cs
исходного файла, целевого для нескольких профилей .net? Или я пропускаю альтернативные решения?
Обновление: похоже, существует проблема с интегрированной средой разработки Visual Studio, которая не позволяет вам напрямую добавить ссылку на библиотеку классов в ваше решение, когда вы создаете его с помощью project.json
вместо использования .csproj
. Однако приведенное ниже решение, указанное Джоном, указывает на то, что вы должны создать свой проект, а затем создать пакет nuget с dotnet pack
. Если вы посмотрите на мою модифицированную демонстрацию здесь, вы увидите pack.cmd содержит шаги, которые я использовал для упаковки пакета nuget, а затем локально «опубликовать» его в файле (локальном каталоге) канала nuget для личного использования.
project.json
, который поддерживает три разных фреймворка. (И у вас могут быть разные варианты сборки для разных фреймворков...) - person Jon Skeet   schedule 05.07.2016