嗯,看起来 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 文件夹在构建 .NET Core 项目时出现在 bin/Debug 中(并将生成的 DLL 放在那里),而UWP 项目本身在 bin/Debug 中构建了另一个 DLL。
bin/Debug/uap10.0/My.dll 是垃圾,它不能包含任何特定于 UWP 的代码(因为通用 Windows 引用在 .NET Core 项目中不可用),因此我没有在项目中定义 WINDOWS_UWP。 json 的“uap10.0”部分。
但是,UWP csproj 文件确实定义了 WINDOWS_UWP,并且通用 Windows 在该项目中可用。因此,当 UWP 项目构建时,它实际上只使用了这个:
"uap10.0": {
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
},
(如果 project.json 中缺少此代码,UWP 项目将无法构建)。 project.json 的其余部分(主要针对“netstandard1.3”目标)对构建过程没有任何危害。
所以我依赖的事实是,我不仅可以在 project.json 中定义条件指令(在这种情况下为 WINDOWS_UWP),还可以在 csproj 文件中定义条件指令,从而在处理使用相同项目的 UWP 项目时获得额外的结果。 json 文件作为 .NET Core 项目。在某种程度上,UWP csproj 就像另一个 project.json 在构建过程中与真实的合并。
是的,我得到了一个额外的 DLL bin/Debug/uap10.0/My.dll,它没有用(只是浪费编译器时间),但我会只选择那些对我有用的输出所以在我的特殊情况下这不是问题。