Ну, похоже, проекты UWP и .NET Core могут использовать один и тот же project.json. Его раздел «рамка» выглядит следующим образом:
"frameworks": {
"netstandard1.3": {},
"uap10.0": {
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
}
}
},
Поскольку проект UWP имеет свой собственный файл csproj, это приводит к созданию 3 библиотеки DLL: project.json вызывает netstandard1.3 и uap10.0 папки отображаются в бункере/Debug (и размещает библиотеки DLL там) при создании проекта .NET Core, тогда как сам проект UWP создает еще одну DLL прямо в bin/Debug.
bin/Debug/uap10.0/My.dll - это мусор, он не может содержать какой-либо код, специфичный для UWP (поскольку универсальная ссылка Windows недоступна в проектах .NET Core), и поэтому я не определяю WINDOWS_UWP в проекте .json's "uap10.0".
Однако файл UWP csproj определяет WINDOWS_UWP, а в этом проекте доступна универсальная Windows. Так что, когда проект UWP будет построен, он фактически использует только это:
"uap10.0": {
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
},
(если этот код отсутствует в project.json, проект UWP не будет строить). Остальная часть project.json (в основном специфическая для цели «netstandard1.3») не вредит процессу сборки.
Поэтому я полагаюсь на то, что я могу определить условные директивы (WINDOWS_UWP в данном случае) не только в файле project.json, но и в файле csproj, и, таким образом, получить дополнительные результаты при обработке проекта UWP, который использует тот же проект .json как проект .NET Core. В некоторой степени UWP csproj выступает в качестве другого project.json, который сливается с реальным во время процесса строительства.
Да, я получаю дополнительный DLL-файл/Debug/uap10.0/My.dll, который бесполезен (просто пустая трата времени компилятора), но тогда я выберу только те выходы, которые полезны для так что это не проблема в моем конкретном случае.
Боюсь, что я не упомянул (ради краткости), что на старых объектах Visual Studio и .NET Framework (например, .NET Framework 2.0) на самом деле существует гораздо больше целей, и они не могут использовать концепцию общей библиотеки. Поэтому я не могу перестроить свой проект таким образом. – Alex