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\ ...
随机推荐
- Python re.sub函数
- 使用C3P0和DBUtils
1.导包 2.配置c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-c ...
- TyvjP1266 费解的开关
P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏 ...
- 剑指offer 1-6
1. 二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析 ...
- Spark day06
SparkStreaming简介 SparkStreaming是流式处理框架,是Spark API的扩展,支持可扩展.高吞吐量.容错的实时数据流处理,实时数据的来源可以是:Kafka, Flume, ...
- Ceph 之 Background on http frontends
Background on http frontends -civetweb frontend --thread per connection, requires a lot of threads - ...
- SDUT-3375_数据结构实验之查找三:树的种类统计
数据结构实验之查找三:树的种类统计 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 随着卫星成像技术的应用,自然资源研究机 ...
- 程序中提醒用户进去App Store 评分 跳转 代码
大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的,如下是代码: 很多用户用了好软件 ...
- Java练习 SDUT-2400_高中数学?
高中数学? Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 高中数学大家都学过数列,其中一个重要的概念就是数列的通项,可 ...
- BZOJ1878 洛谷1972 HH的项链题解
洛谷链接 BZOJ链接 看到这样不用修改的题目,应该佷容易就联想到了离线来处理. 我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置 我们用next[i]表示i处颜色之前 ...