.net项目多个目标架构

refs:

1)https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries

2)https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget

3)https://weblog.west-wind.com/posts/2017/Sep/18/Conditional-TargetFrameworks-for-MultiTargeted-NET-SDK-Projects-on-CrossPlatform-Builds

4)https://stackoverflow.com/questions/42747977/how-do-you-multi-target-a-net-core-class-library-with-csproj

 

需要手工编辑项目文件。

注意点:

1.项目编辑中

TargetFramework  ==> TargetFrameworks


各平台的简写见上面引用文档,可以根据架构不同做预编译处理:
using System; using System.Text.RegularExpressions; #if NET40 // This only compiles for the .NET Framework 4 targets using System.Net; #else // This compiles for all other targets using System.Net.Http; using System.Threading.Tasks; #endif namespace MultitargetLib { public class Library { #if NET40 private readonly WebClient _client = new WebClient(); private readonly object _locker = new object(); #else private readonly HttpClient _client = new HttpClient(); #endif #if NET40 // .NET Framework 4.0 does not have async/await public string GetDotNetCount() { string url = "https://www.dotnetfoundation.org/"; var uri = new Uri(url); string result = ""; // Lock here to provide thread-safety. lock(_locker) { result = _client.DownloadString(uri); } int dotNetCount = Regex.Matches(result, ".NET").Count; return $"Dotnet Foundation mentions .NET {dotNetCount} times!"; } #else // .NET 4.5+ can use async/await! public async Task<string> GetDotNetCountAsync() { string url = "https://www.dotnetfoundation.org/"; // HttpClient is thread-safe, so no need to explicitly lock here var result = await _client.GetStringAsync(url); int dotNetCount = Regex.Matches(result, ".NET").Count; return $"dotnetfoundation.org mentions .NET {dotNetCount} times in its HTML!"; } #endif } }
 

 

posted @ 2020-01-17 15:06  81  阅读(446)  评论(0编辑  收藏  举报