共享项目并不是真正的库,但它们仍然有助于共享代码。共享项目可以替代一个库来共享代码,但是包含代码和共享项目的项目。通过这种方式,可以将特定与平台的代码添加到共享项目中。然而,这个特性只有在没有太多代码差异的情况下才有用。当存在大量的代码差异时,创建特定于平台的库可能更好。
通过下面的代码示例,创建了.NET Core 应用程序和通用Windows应用程序,它们都引用了共享项目。共享项目包含可以同时用于两个平台的代码,但每个都包含特定于平台的代码。
不同之处在于不能用于所有地方的名称空间。可以使用预处理器指令来检查条件编译符号。预处理器指令Windows_UWP是用通用Windows应用程序定义的:
using System;
#if WINDOWS_UWP
using Windows.UI.Popups;
#endif
Message类定义Show、ShowAsync和Add方法。Add方法适用于每个平台。只有在定义NETCOREAPP2_0指令时,Show方法才可用,而ShowAsync方法仅适用于UWP应用程序。类可以用internal访问修饰符定义,因为它不在程序集之外使用:
internal class Message
{
#if NETCOREAPP3_1
public static void Show(string message)
{
Console.WriteLine(message);
}
#elif WINDOWS_UWP
public static async Task ShowAsync(string message)
{
await new MessageDialog(message).ShowAsync();
}
#endif
public static int Add(int x, int y) => x + y;
}

共享项目在.NET Core和通用Windows应用中提供了一种共享代码的方法,它允许部分特定平台的代码共存。通过预处理器指令处理平台差异,如在.NET Core和UWP中的Message类实现。使用Visual Studio的Reference Manager可以方便地添加共享项目,同时编辑器能根据预处理器定义灰显不可用的代码。
1299

被折叠的 条评论
为什么被折叠?



