Roslyn 使用 Target 替换占位符方式生成 nuget 打包
本文告诉大家如何编写在编译过程修改打包文件
在项目文件的相同文件夹可以放一个 nuspec 用来告诉 VisualStudio 如何打包
现在尝试创建一个项目 NearjerbetearDeeyitoo ,在这个项目用来告诉大家如何使用替换占位符的方法
在开始做之前需要告诉大家为什么需要使用这个方法
因为写的 nuspec 文件是可以保持不动,在多个项目使用相同的一个 nuspec 文件,但是对不同的项目使用定制的方式,让项目自己输入在编译才能知道的变量,这样可以保持不修改 nusec 文件。
先来创建一个 nuspec 文件,把这个文件随意一个文件名ReresouJesou.nuspec,如果在 VisualStudio 使用某个 nuspec 文件打包,就需要在项目文件添加下面代码
<NuspecFile>ReresouJesou.nuspec</NuspecFile>
为了在之后的打包过程可以添加一些变量,就需要修改项目文件
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>NearjerbetearDeeyitoo</PackageId>
<NuspecFile>ReresouJesou.nuspec</NuspecFile>
<IsTool>True</IsTool>
</PropertyGroup>
需要稍微解释一下上面的代码,这里的 PackageId 实际上是我随意给的,大家可以替换PackageId为自己喜欢的字符串。在NuspecFile就需要指定nuspec文件所在的路径,这里用的是相对的路径。最后设置IsTool只是用来告诉安装 Nuget 的程序,这是一个工具 nuget 包没有引用。
现在修改一下 ReresouJesou.nuspec 文件,添加下面代码
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>$id$</id>
<version>$version$</version>
<authors>lindexi</authors>
<owners>lindexi</owners>
<developmentDependency>true</developmentDependency>
<projectUrl>https://lindexi.github.io/lindexi</projectUrl>
<description>这个文件告诉大家如何在编译修改占位字符</description>
</metadata>
</package>
可以从上面代码看到和普通的 nuget 文件的不相同,第一个是id使用的是$id$ ,这里的id就是使用占位符,可以在项目文件使用 target 的方式替换占位符。
上面代码有 id 和版本都使用占位符,下面就来写 target 来替换两个占位符为项目需要的字符。
<Target Name="GenerateNuspecProperties" BeforeTargets="GenerateNuspec">
<PropertyGroup>
<NuspecProperties>
$(NuspecProperties);
id=$(PackageId);
version=1.0;
dll=$(TargetPath);
</NuspecProperties>
</PropertyGroup>
</Target>
写一个 Target 需要给这个 Target 一个命名,还需要告诉 VisualStudio 在什么的时候才使用这个 Target 这里是在创建 nuget 文件的时候才使用。
这里通过定义 nuget 属性的方式用来替换。
替换的语法是 占位符 = 字符串; 的方法,因为这里的字符串可以使用 $(变量) 的方式,所以就可以用到刚才在上面定义的字符串。
在属性的$(NuspecProperties);就是在有其他的 target 也使用了 NuspecProperties 不会被这个 target 覆盖。从上面的代码可以看到我多设置了一个dll的字符串,在nuget文件是不存在这个dll字符串,但是也没有问题。
但是可以多设置 nuget 文件不使用的字符串,不可以少设置 nuget 文件存在的字符串,不然就可能出现下面的代码
错误 值不能为 null 或空字符串。
NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets
如何写 target 请看 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task) - walterlv
更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译
NuGet pack and restore as MSBuild targets
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
Roslyn 使用 Target 替换占位符方式生成 nuget 打包的更多相关文章
- 2019-7-29-Roslyn-使用-Target-替换占位符方式生成-nuget-打包
title author date CreateTime categories Roslyn 使用 Target 替换占位符方式生成 nuget 打包 lindexi 2019-7-29 10:1:1 ...
- maven 编译替换占位符
首先开启资源配置的插件,由此插件替换占位符 <plugin> <groupId>org.apache.maven.plugins</groupId> <art ...
- String替换占位符
/** * 依次替换占位符 * 例如: 姓名:{s},电话:{s},邮箱:{s} --> 姓名:小张,电话:18800000001,邮箱:abc@123.com * pattern = &quo ...
- spring中PropertyPlaceholderHelper替换占位符的值
1.Properties中的值替换¥{}或者#{}占位符 String text = "foo=${foo},bar=${bar}"; Properties props = new ...
- 【Spring源码分析】.properties文件读取及占位符${...}替换源码解析
前言 我们在开发中常遇到一种场景,Bean里面有一些参数是比较固定的,这种时候通常会采用配置的方式,将这些参数配置在.properties文件中,然后在Bean实例化的时候通过Spring将这些.pr ...
- spring源码解析(一)---占位符解析替换
一.结构类图 ①.PropertyResolver : Environment的顶层接口,主要提供属性检索和解析带占位符的文本.bean.xml配置中的所有占位符例如${}都由它解析 ②.Config ...
- 【占位符替换】替换String中的占位符标志位{placeholder}
概述 占位符替换, 占位符表示为:{placeholder}; 示例:替换如下{xxx}占位符中的内容 "名字:{name},年龄:{age},学校:{school}" 提供了两种 ...
- Spring Boot使用Maven打包替换资源文件占位符
在Spring Boot开发中,通过Maven构建项目依赖是一件比较舒心的事,可以为我们省去处理冲突等大部分问题,将更多的精力用于业务功能上.近期在项目中,由于项目集成了其他外部系统资源文件,需要根据 ...
- Java替换字符串中的占位符
在开发中,会有动态配置字符串其中的某些字符,如何使用字符中的占位符,并且在代码动态替换占位符实现动态配置字符串! 1.定义字符串时,再string文件添加字符串: 注意!记得要在字符文件中加上这些: ...
随机推荐
- 链表源代码(C语言实现)
源代码(C语言实现) ①.构造链表节点 typedef struct Node //一个单独的节点 { int ...
- 【JZOJ4924】【NOIP2017提高组模拟12.17】向再见说再见
题目描述 数据范围 =w= 设h[i]表示,甲队得到i分的方案数. 那么h[(n+k)/2]和h[(n−k)/2]就是答案. 设g[i]表示,甲队得到至少i分的方案数. 那么h[i]=g[i]−∑j& ...
- 【OI】位运算操作
一.基础操作 1.a<<b 将二进制a左移b位,不够的地方用0补位 例如 100<<2 == 10000 2.a>>b 将二进制a右移b位 例如 100>&g ...
- python LEGB原理简要介绍
- a configuration error occured during startup.please verify the preference field with the prompt:
Window->Preferences->MyEclipse Enterprice Workbench->Servers->Tomcat->选择你的Tomcat(比如To ...
- 2018-8-10-win10-uwp-如何创建修改保存位图
title author date CreateTime categories win10 uwp 如何创建修改保存位图 lindexi 2018-08-10 19:16:50 +0800 2018- ...
- 《DL/T 1476-2015 电力安全工器具预防性试验规程》中的样品名称及试验项目
- Code Force 429B Working out【递推dp】
Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...
- AcWing95. 费解的开关 枚举+位运算
这道题的确比较难想,首先我们知道图比较小,有可能是枚举,那么该如何枚举呢??? 你可以发现,我们只要把第一排定了,并且保证第一排不准动,那么答案就定了 也就是说,我们首先用二进制枚举,枚举第一行需要翻 ...
- @loj - 2480@ 「CEOI2017」One-Way Streets
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一张 n 个点 m 条边的无向图,现在想要把这张图定向. 有 ...