2019-11-6-Roslyn-how-to-use-WriteLinesToFile-to-write-the-semicolons-to-file
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
Roslyn how to use WriteLinesToFile to write the semicolons to file
|
lindexi
|
2019-11-06 19:13:42 +0800
|
2018-11-1 16:9:1 +0800
|
Roslyn MSBuild 编译器
|
As you know, the WriteLinesToFile will separate the item by semicolons. How can we use WriteLinesToFile to write the semicolons to file?
For example, we need to write the code below to file.
Console.WriteLine("I am lindexi");
As you can see, we can find some problems in the code.
The first thing is the code include quotation mark that we can not write the code directly.
We can use property item with "CDATA" that CDATA is defined as blocks of text that are not parsed by the parser.
<PropertyGroup>
<SomeThing>
<![CDATA[
Console.WriteLine("I am lindexi");
]]>
</SomeThing>
</PropertyGroup>
<WriteLinesToFile File="lindexi.cs" Lines="$(SomeThing)"></WriteLinesToFile>
You can find that your content in the file misses the semicolons character.
We can use %3b to replace the semicolons.
<PropertyGroup>
<SomeThing>
<![CDATA[
Console.WriteLine("I am lindexi")%3b
]]>
</SomeThing>
</PropertyGroup>
<WriteLinesToFile File="lindexi.cs" Lines="$(SomeThing)"></WriteLinesToFile>
After you run the target, you can find a file named lindexi.cs added in your project.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> <Target Name="T2" BeforeTargets="BeforeBuild">
<PropertyGroup>
<SomeThing>
<![CDATA[
Console.WriteLine("I am lindexi")%3b
]]>
</SomeThing>
</PropertyGroup>
<WriteLinesToFile File="lindexi.cs" Lines="$(SomeThing)"></WriteLinesToFile>
</Target> </Project>
Please open the file and then you can find the content in the file include the semicolons character.
We can set the property in the WriteLinesToFile task to Overwrite the file.
You can copy the code below to your project file and then run your project. You will see the console output something interesting.
<Target Name="T1" BeforeTargets="BeforeBuild">
<PropertyGroup>
<SomeThing>
<![CDATA[
using System%3b namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("I am lindexi")%3b
}
}
}
]]>
</SomeThing>
</PropertyGroup>
<WriteLinesToFile File="lindexi.cs" Lines="$(SomeThing)" Overwrite="true"></WriteLinesToFile>
<ItemGroup>
<Compile Remove="@(Compile)"></Compile>
<Compile Include="lindexi.cs"></Compile>
</ItemGroup>
</Target>
I remove all your code and replace the code to the content in SomeThing property. And then I add the code that named lindexi.cs to compile.
Using MSBuild Escape
We can find this way should change the code. We can not copy the code in other to write to file and we should replace all the semicolons to %3b that is hard to change all the code.
We can use MSBuild Escape to escape the semicolons and you can see the code.
<Target Name="T1" BeforeTargets="BeforeBuild">
<PropertyGroup>
<SomeThing>
<![CDATA[
using System; namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("I am lindexi");
}
}
}
]]>
</SomeThing>
</PropertyGroup>
<WriteLinesToFile File="lindexi.cs" Lines="$([MSBuild]::Escape($(SomeThing)))" Overwrite="true"></WriteLinesToFile>
<ItemGroup>
<Compile Remove="@(Compile)"></Compile>
<Compile Include="lindexi.cs"></Compile>
</ItemGroup>
</Target>
The [MSBuild]::Escape can use property function to escape strings.
How to: Escape Special Characters in MSBuild - Visual Studio
In the CDATA section that follows,
%40=@%25=%%3B=;%24=$
2019-11-6-Roslyn-how-to-use-WriteLinesToFile-to-write-the-semicolons-to-file的更多相关文章
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...
- 2019.11.9 csp-s 考前模拟
2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...
- [6644] 02 Apr 23:11:58.976 # Creating Server TCP listening socket *:6379: bind: No such file or directory
redis报错: [6644] 02 Apr 23:11:58.976 # Creating Server TCP listening socket *:6379: bind: No such fil ...
- ArchLinux 2019.11.01安装流程--安装基本系统
安装前的一些话 本文是参考官方文档ArchLinux的Installation guide(简体中文)加实际操作编写的. 有啥都好说,转载时请注明作者,这是基本素质,也是法律要求 安装是在虚拟机上进行 ...
- 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋
题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...
- Spring5最新完整教程IDEA版【通俗易懂2019.11月】
1.Maven找包: spring-webmvc spring-jdbc 2.Spring的本质是控制反转,依靠依赖注入来实现.以一个servcie对象为例,即是service暴露注入接口(构造,se ...
- 2019/11/12 CSP模拟赛&&考前小总结
写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些 ...
- pycharm 激活码 2019/11最新福利(2)
812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...
- 2019.11.11 洛谷月赛t3
题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...
随机推荐
- oracle国家字符集
国家字符集是一个备用字符集,利用此字符集可以在没有Unicode 数据库字符集的数据库中存储 Unicode 字符. 选择国家字符集的其它原因如下: 对于频繁的字符处理操作,不同的字符编码方案可能更为 ...
- php怎么自动加载
在 PHP 代码的顶部你是不是经常看到这样的代码. require 'lionis.php'; require 'is.php'; require 'cool.php'; 如果只是引入几个 PHP 脚 ...
- 【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
[链接]h在这里写链接 [题意] 给你n个数字; 让你在其中找出三个数字i,j,k(i<=j<=k); 使得p*a[i]+q*a[j]+r*a[k]最大; [题解] /* 有一个要 ...
- 【Leetcode】两数之和,三数之和,四数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- Java大数类BigDecimal及八种舍入模式的介绍
BigDecimal的引入 在利用Java编程语言开发银行.金融类等需要对数值进行高精度计算的软件时,我们经常使用BigDecimal和BigInteger这两个大数据类,而不是常见的int.long ...
- 【JZOJ4831】【NOIP2016提高A组集训第3场10.31】方程式
题目描述 数据范围 解法 枚举根之后,使用大除法. 代码 #include<stdio.h> #include<iostream> #include<string.h&g ...
- Linux使用及命令
#命令模式下输入:光标移动到第34行第15个字符 <Enter>15l(这是小写的L) ctrl+u删除光标前面的字符 ctrl+j删除光标后面的字符 在Linux下用VIM打开大小几个G ...
- 干货|Spring Cloud Bus 消息总线介绍
继上一篇 干货|Spring Cloud Stream 体系及原理介绍 之后,本期我们来了解下 Spring Cloud 体系中的另外一个组件 Spring Cloud Bus (建议先熟悉 Spri ...
- 巨蟒python全栈开发-第11阶段 ansible_project2
一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...
- SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...