如果我们开发Windows用户程序(WPF、Winform),我们会用到.NET Framework。
如果我们要做跨平台的应用,我们会用到.NET Core。既然是跨平台,是不是.NET Core的项目可以用在WPF上呢?并不可以,.NET Core没有Windows的特性,不能直接用在WPF上。
但实际上,我们开发的一些类库,并不涉及到Windows特性,例如我们只是实现某些算法,纯数学的。我们怎么把这样的类库既用在.NET Framework的项目上,又用在.NET Core的项目上呢?
考虑到还有一个.NET Standard,我们先看看三者之间的关系:
这么说,.NET Standard就是.NET Framework和.NET Core的基础。那我们是不是开发.NET Standard的类库就可以呢?
理论上这样做是可以的,但目前这种方法会出现以下的问题:
(1).NET Standard还不成熟,比较乱,更新之后dll变化比较大。
(2).NET Framework的项目加入.NET Standard后,会多出几十上百个dll。
(3).NET Standard还有很多功能没有实现。
那么,我们这里还有一个解决问题的方法,就是我写一份代码,然后分别编译成.NET Framework、.NET Core和.NET Standard的dll,供不同的项目使用。
第一步,必须使用Visual Studio 2017以上的版本,否则没办法这么做。
第二步,新建一个.NET Core的类库项目。
第三步,用文本工具打开项目文件(*.csproj),它其实就是一个XML文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
</Project>
第四步,把TargetFramework一行改成:<TargetFrameworks>netcoreapp2.1;net45</TargetFrameworks>。这样,项目就加入了.NET Framework 4.5的编译了。注意,改后的是TargetFrameworks,复数。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp2.1;net45</TargetFrameworks>
</PropertyGroup>
</Project>
第五步,重新用Visual Studio打开项目,我们就会看到有两个编译选项,输出也会有两个。