title author date CreateTime categories
Roslyn 通过 Nuget 管理公司配置
lindexi
2018-9-19 10:57:5 +0800
2018-09-18 20:33:37 +0800
Roslyn MSBuild 编译器

本文来告诉大家如何用 Roslyn 管理配置,在开一个新的项目的时候经常需要添加公司,版权等,但是这些信息不想每次都添加于是我就想用 Nuget 管理所有配置,安装一个 nuget 就自动配置

我在公司很久都没开发过业务,我都是在做底层的库,于是我就需要创建很多个项目,只要我发现某个功能用到的一些代码可以在其他功能使用,我就会将这个代码抽到一个库。

在创建新的库的时候,我就需要添加下面配置

<Company>dotnet-campus</Company>
<Copyright>Copyright (c) 2018 dotnet-campus</Copyright>

在第二年的时候,我需要修改很多库的版权,修改为 2019 ,而从 VisualStudio 打开是很慢的,修改一个项目文件需要很长的时间

而且我的团队也有新人加入,我告诉他需要添加一些配置,但是每次的提交我都需要关注,是不是公司名没写对

最近我学到 Roslyn 的方法,通过 Nuget 添加配置,下面让我手把手告诉大家如何做一个配置。在上一篇文章Roslyn 通过 nuget 统一管理信息告诉了大家如何通过手动写文件的方式做一个 nuget 包,本文来告诉大家通过 VisualStudio 创建工程的方式打包。

对比两篇博客,会发现通过 VisualStudio 打包的方式会更加简单。

先通过 VisualStudio 创建一个 dotnet core 项目,这个项目实际不需要代码。

创建了一个项目之后需要在这个项目里面添加一些文件,假设创建的项目的名字是 lindexi 在这个项目创建 Assets 文件夹,然后在文件夹里面创建 lindexi.props 文件

这个文件将会作为 nuget 安装时使用的文件,在里面就填写配置

<Project>
<PropertyGroup>
<Company>dotnet-campus</Company>
<Owners>$(Company)</Owners>
<Copyright>Copyright (c) 2018 dotnet-campus</Copyright>
</PropertyGroup>
</Project>

这里的信息需要根据自己的需要写,通过这里写的内容就可以通过 nuget 安装到自己的项目

但是现在还不能做出一个 nuget 包,还需要在项目文件添加一些内容,右击工程点击编辑项目文件,在项目文件添加一些代码,请看下面代码

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> <ItemGroup>
<None Include="Assets\**" Pack="True" PackagePath="build\" />
<None Include="Assets\**" Pack="True" PackagePath="buildMultiTargeting\" />
</ItemGroup> </Project>

在上面的代码就是添加了 Assets 文件夹,请看下面代码

  <ItemGroup>
<None Include="Assets\**" Pack="True" PackagePath="build\" />
<None Include="Assets\**" Pack="True" PackagePath="buildMultiTargeting\" />
</ItemGroup>

上面的代码的意思就是打包的时候添加 Assets 文件夹内的所有文件,在打包的时候添加到 build 和 buildMultiTargeting 文件夹下

现在右击项目打包就可以在 bin\debug 文件夹下找到 xx.1.0.0.nupkg 文件

这个文件可以通过 Nuget Package Explorer 打开,这个软件可以在应用商店下载,点击下载

打开可以看到下面的文件,这里包含的 build 文件和 buildMultiTargeting

现在可以通过安装这个 nuget 包的方式,测试这个包是否可以使用。安装本地的 nuget 包的方式很简单,通过在 nuget 设置的方法,具体请看Roslyn 通过 nuget 统一管理信息

这时我创建了一个新的 dotnet core 项目,然后在这个项目安装这个包,通过这个方式编译出来的文件,右击属性就可以发现这个 dll 的信息已经包含了。

当前现在还没做完,如果这时创建了一个 dotnet framework 4.5 的项目,会发现这个包无法安装,因为这个包的依赖是 dotnet core 2.1 ,所以需要添加一些代码让这个包可以在 dotnet framework 使用

右击编辑项目文件,修改 TargetFramework 为多个,请看代码

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2.0;net35</TargetFrameworks>
<Version>1.6.0</Version>
<Description>林德熙是逗比</Description>
</PropertyGroup> <ItemGroup>
<None Include="Assets\**" Pack="True" PackagePath="build\" />
<None Include="Assets\**" Pack="True" PackagePath="buildMultiTargeting\" />
</ItemGroup> </Project>

这里将原来的 TargetFramework 修改为 TargetFrameworks 添加了其他的框架,具体可以使用的请看从以前的项目格式迁移到 VS2017 新项目格式

现在打出来的包还有影响到安装这个包的项目,还需要在项目文件做一些更改,请看代码

    <IsTool>true</IsTool>
<NoPackageAnalysis>true</NoPackageAnalysis>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<NoBuild>true</NoBuild>
<IncludeBuildOutput>false</IncludeBuildOutput>

具体上面的代码的意思请看项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - walterlv

从以前的项目格式迁移到 VS2017 新项目格式

Roslyn 通过 nuget 统一管理信息

2018-9-19-Roslyn-通过-Nuget-管理公司配置的更多相关文章

  1. IDC Digital Transition Annual Festival(2018.10.19)

    时间:2018.10.19地点:北京万达文化酒店

  2. 2018.10.19浪在ACM 集训队第一次测试赛

    2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...

  3. 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)

    20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

  4. AI Summit(2018.07.19)

    AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店

  5. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  6. 2018.8.19 mybatis 环境搭建---配置mysql 。(Windows环境下面)

    安装mysql Install/Remove of the Service Denied!错误的解决办法 在windos 的cmd下安装mysql 在mysql的bin目录下面执行: mysqld - ...

  7. NuGet 自定义配置

    默认配置: 默认配置文件的路径%APPDATA%\NuGet\NuGet.Config (DOS) 或 $ENV:APPDATA\NuGet\NuGet.Config (PowerShell),(例如 ...

  8. NuGet:自定义配置信息(2)

    有些类库项目打包后,如何让别人引用的时候自动添加上对应的配置项目呢,比如EntityFramework的NuGet包,打开后可以看到类似下面的结构: 空白处右击——Add Content Folder ...

  9. 2018.7.19 . php复习

    PHP程序设计 1.请写出HTML标记meta的完整英文单词:metadata 2.相当于http文件头作用(向浏览器传回正确和精确地显示网页内容的消息)的meta标记的属性是http-equiv 3 ...

  10. 2018.5.19 Oracle数据操作和管理表的综合练习

    --作业一.使用自己的用户登录,完成如下操作,并且创建5条测试数据 -- 创建学生表(stu),字段如下: -- 学号(stuID) -- 姓名(stuName) -- 性别(stuSex) -- 入 ...

随机推荐

  1. bzoj 3029 守卫者的挑战——概率期望dp+状态数思考

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 先随便写了个dfs,记录“前 i 次.成功 j 次.容量-残片=k”的概率.因为是否可 ...

  2. 移动端meta汇总

    part1 一.天猫(http://m.tmall.com) <title>天猫触屏版</title> <meta content="text/html; ch ...

  3. scrollbar 滚动条

    滚动条样式:自定义元素的滚动条 <!DOCTYPE html> <html> <head lang="en"> <meta charset ...

  4. web前端学习(四)JavaScript学习笔记部分(9)-- JavaScript面向对象详解

    1.认识面向对象 1.1.概念 1.一切事物皆是对象 2.对象具有封装和继承特性 3.信息隐藏(类的信息隐藏,包括属性和方法) <!DOCTYPE html> <html lang= ...

  5. promise的实现方式和运行机制

    promise的规范其实种类很多,我们最常用的是promise/A+ 这篇文章会先将一个类似于promise的构造函数怎么写,网上很多教程并没有实现A+规范,只是看起来像而已 然后我们深入探究如何一步 ...

  6. Python当前进程信息 (os包)

    Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. (o ...

  7. MyBatis小问题-Mapper中错误No constructor found...

    前两天又被公司叫去修改其他产品的一些问题了,没有看java相关的,今天周六,看了看MyBatis东西. 就是简单的在MySql中建了个users表,很简单,包含id,name,age,写了个bean. ...

  8. oracle定制定时执行任务

    1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可以使用任务计划来实现, 对于winXP系统,设置步骤如下,开始---设置---控制面板-- ...

  9. day36 05-Hibernate检索方式:离线条件查询

    图二 离线条件查询 Struts 2是web层的框架.session得在dao层才有.有的时候这些数据是没在你的对象里面的.像是否上传简历.这个字段不在我的数据库里面.例如是否上传简历这个条件不在我们 ...

  10. Data Lake Analytics IP白名单设置攻略

    当我们成功开通了 DLA 服务之后,第一个最想要做的事情就是登录 DLA 数据库.而登录数据库就需要一个连接串.下面这个页面是我们首次开通 DLA 之后的界面,在这里我们要创建一个服务访问点. 在上面 ...