2018-9-19-Roslyn-通过-Nuget-管理公司配置
| 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
2018-9-19-Roslyn-通过-Nuget-管理公司配置的更多相关文章
- IDC Digital Transition Annual Festival(2018.10.19)
时间:2018.10.19地点:北京万达文化酒店
- 2018.10.19浪在ACM 集训队第一次测试赛
2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...
- 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)
20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
- AI Summit(2018.07.19)
AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店
- 3/19 Django框架 url路由配置及模板渲染
3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...
- 2018.8.19 mybatis 环境搭建---配置mysql 。(Windows环境下面)
安装mysql Install/Remove of the Service Denied!错误的解决办法 在windos 的cmd下安装mysql 在mysql的bin目录下面执行: mysqld - ...
- NuGet 自定义配置
默认配置: 默认配置文件的路径%APPDATA%\NuGet\NuGet.Config (DOS) 或 $ENV:APPDATA\NuGet\NuGet.Config (PowerShell),(例如 ...
- NuGet:自定义配置信息(2)
有些类库项目打包后,如何让别人引用的时候自动添加上对应的配置项目呢,比如EntityFramework的NuGet包,打开后可以看到类似下面的结构: 空白处右击——Add Content Folder ...
- 2018.7.19 . php复习
PHP程序设计 1.请写出HTML标记meta的完整英文单词:metadata 2.相当于http文件头作用(向浏览器传回正确和精确地显示网页内容的消息)的meta标记的属性是http-equiv 3 ...
- 2018.5.19 Oracle数据操作和管理表的综合练习
--作业一.使用自己的用户登录,完成如下操作,并且创建5条测试数据 -- 创建学生表(stu),字段如下: -- 学号(stuID) -- 姓名(stuName) -- 性别(stuSex) -- 入 ...
随机推荐
- [转]了解screen对象的常用视图属性
前面的话 screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.每个浏览器中的screen对象都包含着各不相同的属性.本文将详细介绍screen对象的 ...
- C++ std::map用法简介
#include "map" //引入头文件 初始化: std::map <int, std::string> _map1; //初始化 //c++11中引入的,可以直 ...
- Hibernate: insert into xxx (name) values (?)但是数据库中没有数据
学习hibernate 控制台提示 但数据库中没有任何数据被插入 同样的代码,参考例程中就有数据被插入 比较无解,删除部分代码,红框中的部分,运行一下,再贴回去,就好了
- MySQL数据库起步 关于数据库的基本操作(更新中...)
mysql的基本操作 连接指定的服务器(需要服务器开启3306端口) mysql -h ip地址 -P 端口号 -u 账号 -p 密码 删除游客模式 mysql -h ip地址 -P 端口号 -u 账 ...
- FreeMarker 获取页面appplication、request、session
使用Request里的Attribute值最简单的方法就是直接${AttributeName}或者安全一点:${AttributeName!"default Value"} 1.取 ...
- git中由readme.md文件引发的问题
在GitHub上建立一个仓库并且添加了readme.txt文件. 无论是push前先将远程仓库pull到本地仓库,还是强制push都会弹出这个问题. Github 禁用了TLS v1.0 and v1 ...
- 在Linux系统下进入MySql数据库进行操作
例: ---- 1.进入mysql数据库 root@test:/home# mysql -uroot -proot <uroot是用户名,proot是密码> 2.查询所有的库 my ...
- cmake how to create vs file filters
用cmakelists构建出来的工程,没有文件filters,可采用如下方法解决 set(SOURCE_LIST "lotteryTicket.cpp" "stdafx. ...
- 洛谷P2429 制杖题 [2017年6月计划 数论10]
P2429 制杖题 题目描述 求不大于 m 的. 质因数集与给定质数集有交集的自然数之和. 输入输出格式 输入格式: 第一行二个整数 n,m. 第二行 n 个整数,表示质数集内的元素 p[i]. 输出 ...
- tinkcmf视频上传大小限制
/application/Common/Common/function.php 找到upload_max_filesize把后面的数值改成合适的大小(单位是KB)