在我们的 .net core 大迁移工程中,有些项目完成了迁移,有些还未迁移,这就带来了一个烦恼——我们自己开发的公用类库如何在 .net core 与 .net framework 项目中共享?如果不能共享,就得痛苦地针对同一个功能分别写 .net core 版与 .net framework 版。迁移开始的一段时间,我们就干了这样的傻事。

最近我们又遇到了这个问题,但今非昔比,如今已经有了为此而生的羽翼丰满的 .net standard 2.0 ,再加上 Artech 这篇醍醐灌顶的博文 .NET Core跨平台的奥秘[下篇]:全新的布局 解释清楚了 .net standard 的原理,于是可以借此机会实际体验一下 .net standard 2.0 的魅力。

需要在 .net core 与 .net framework 中共享的类库,只需创建一个 .net standard 类库项目 ,然后发布为 nuget 包。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>

在 asp.net core 项目中直接安装这个 nuget 包即可。

在基于 .net framework 的传统 asp.net 项目中呢?。。。也是直接安装这个 nuget 包即可,这么简单?是的,就这么简单!

但有一个不同之处,传统 asp.net 项目安装 nuget 包时会自动安装一个依赖包 NETStandard.Library ,这个包中装的是以下42个程序集:

.net framework 应用能够引用基于 .net standard 的类库靠的就是上面的这些程序集,其中最重要的角色是 netstandard.dll ,它是一个垫片程序集,由它负责将对 .net standard api 的调用转发到 .net framework 中对应的真正干活的程序集,实现了 .net framework 与 .net core 的类库共享。

另外,有一个地方需要注意,在一个传统 asp.net 解决方案中,如果只是在该解决方案的类库项目中安装了 .net standard 的 nuget 包,编译 web 项目时并不会将上面的42个程序集复制到 web 项目的 bin 文件夹中,需要在 web 项目中再安装一下  NETStandard.Library nuget 包。

帅!这下还未完成迁移的传统 asp.net 项目可以先直接调用 .net core 中的公用类库了。

实际体验 .NET Standard 2.0 的魅力的更多相关文章

  1. .NET Core 2.0及.NET Standard 2.0

    .NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q ...

  2. 微软Build 2017第二天 .NET Standard 2.0 Preview 的客户端跨平台

    微软公司一年一度的开发者大会,即“Microsoft Build 2017”在总部西雅图正式开幕.按照官方安排,本次大会将持续 3 天,主题围绕微软公司各项最新技术成果的展示和研讨,包括与微软相关的产 ...

  3. .NET Standard 2.0 特性介绍和使用指南

    .NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...

  4. [C#] .NET Core/Standard 2.0 编译时报“CS0579: Duplicate 'AssemblyFileVersionAttribute' attribute”错误的解决办法

    作者: zyl910 一.缘由 当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件. 而且,若是手工在 ...

  5. .NET Standard 2.0正式发布了

    亦可赛艇 前天(2017年8月14日),.NET Standard 2.0正式版终于发布了,与之相配套的.NET Core 2.0也同时正式发布,真是令人振奋. 详情请看:https://blogs. ...

  6. 在ubuntu16.04中再次体验.net core 2.0

    在上一篇文章中在ubuntu16.04中初次体验.net core 2.0 简单介绍了一下ubuntu中运行.net core 2.0.配置nginx反向代理以及安装supervisor守护进程……本 ...

  7. .NET Core 2.0及.NET Standard 2.0 Description

    NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q3 ...

  8. 安装.Net Standard 2.0, Impressive

    此版本的.NET Standard现在支持大约33K的API,与.NET Standard 1.x支持的14K API相比.好的是大部分API来自.NET Framework.这使得生活更容易将代码移 ...

  9. Introducing XAML Standard and .NET Standard 2.0

    XAML Standard We are pleased to announce XAML Standard, which is a standards-based effort to unify X ...

随机推荐

  1. CS页面-Asp.net+Spring.Net.Framework--SNF快速开发平台3.0

    SNF快速平台有BS和CS两种,之前介绍了BS界面,下面发几张图看一下CS界面看看是什么样的 这是SNF快速开发平台的CS框架 1.有多种主页和登录页面. 2.多种页面风格 下面就先先看看页面显示的效 ...

  2. docker镜像、容器以及命令操作

    docker image docker image是一个极度精简版的Linux程序运行环境,官网的java镜像包括的东西更少,除非是镜像叠加方式的如centos+java7 docker image是 ...

  3. bindpose定义

    根据常识,有: 但根据骨骼动画的定义,又有: 对比两式,可得bindpose的定义: 即骨骼bone的bindpose是:在绑定时刻,将顶点由mesh的局部空间变换到bone的局部空间的变换.

  4. [CTCI] 最小调整有序

    最小调整有序 题目描述 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的.注意:n-m应该越小越好,也就是说,找出符合条件的最短序列. 给定一个int数 ...

  5. golang slice

    golang 在for range一个slice时,会读出其cap长度.在for的过程中,即使动态append该slice,最终for也会在第一次读取的cap长度处停止. package main i ...

  6. Linux免密码登录设置 && 设置快捷键

    看到这篇文章,你肯定是有这种需求. 假设要登录的机器为192.168.1.100,当前登录的机器为192.168.1.101. 首先在101的机器上生成密钥(如果已经生成可以跳过): $ ssh-ke ...

  7. 3D 特征点概述(2)

    还是紧接着上一文章的思路继续介绍3D特征点的基本概念问题,还是这个表格: Feature Name Supports Texture / Color Local / Global / Regional ...

  8. git排除常用配置,svn与git共存时.gitignore配置

    #idea与myeclipse配置文件全部排除 *.class #package file*.war*.ear #kdiff3 ignore*.orig #maven ignoretarget/ #e ...

  9. C++ 智能指针二

    /* 智能指针shared_ptr注意点 */ #include <iostream> #include <string> #include <memory> // ...

  10. .NET Memory Allocation Profiling with Visual Studio 2012

    .NET Memory Allocation Profiling with Visual Studio 2012 This post was written by Stephen Toub, a fr ...