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\ ...
随机推荐
- 移动端以及 PC浏览器页面分享到朋友圈等的功能实现
我们经常可以在一些 app上看到分享到朋友圈.微信好友.qq好友等功能,例如 饿了么.美团等 app,下单之后就会弹出给好友发红包的 modal窗,这在 app上很常见,app的权限可以很大,甚至连启 ...
- html Servlet web.xml(转)
在浏览器输入:http://127.0.0.1:8080/test/test.html点击提交按钮,Tomcat后台输出:control: aaa's value is : bbb页面显示结果:pag ...
- python ddt 实现数据驱动
ddt 是第三方模块,需安装, pip install ddt DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果da ...
- Leetcode830.Positions of Large Groups较大分组的位置
在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例如,在字符串 S = "abbxxxxzyy" 中,就含有 "a", " ...
- QT,QLabel添加超链接
1.方法1:使用信号槽绑定方式 //设置超链接并绑定信号槽QLabel *linkLabel = new QLabel(); linkLabel->setText("<a hre ...
- poj 2431 【优先队列】
poj 2431 Description A group of cows grabbed a truck and ventured on an expedition deep into the jun ...
- poj3469 最小割
最大流之后S集合与T集合不在相连,即s不能到达T中的点. 对于同一个模块,Ai,Bi,Ai与源点相连,Bi与汇点相连.不同CPU间消耗的模块,相连. 由于最后模块只能在一个CPU中运行,所以要么与源点 ...
- jq 获取内容
1.html()-设置或者返回被选元素的内容(包括html标记) $(selector).html() 2.text()-设置或者返回被选元素的内容 $(selector).text() 3.val( ...
- IDEA-创建WEB项目并部署Tomcat
一.创建简单web项目 1.创建一个web project File -> new Project ->选择project sdk 为1.6(如果没有sdk的同学请先配置)-> Ne ...
- [React Native]访问操作系统剪贴板 Clipboard
我们之前学习了TextInput组件, 有时候我们需要在TextInput组件中复制或者粘贴一些文字. React Native为开发者提供了 Clipboard API,Clipboard 组件可以 ...