2019-4-29-Roslyn-将这个文件放在你的项目文件夹,无论哪个控制台项目都会输出林德熙是逗比...
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
Roslyn 将这个文件放在你的项目文件夹,无论哪个控制台项目都会输出林德熙是逗比
|
lindexi
|
2019-4-29 12:1:44 +0800
|
2018-11-01 15:40:29 +0800
|
Roslyn MSBuild 编译器
|
虽然已经通过很多篇博客告诉大家如何通过 Directory.Build.props 文件修改编译的方法,但是本文还是提供一个新的思路
只需要在项目文件夹,或者磁盘的文件夹,如 E:\ 放下本文提供的 Directory.Build.props 文件,整个文件夹内的控制台项目就会输出 林德熙是逗比 想要知道是怎么做的,请看下面
在开始阅读本文之前,需要让大家知道什么是 Directory.Build.props 文件,这个文件是给在 VisualStudio 控制编译,可以用来控制 Directory.Build.props 文件所在的文件夹内的所有项目。
如我在 E:\lindexi 文件夹内放一个 Directory.Build.props 文件,在 E:\lindexi 文件夹内,如果有放工程,就可以通过这个文件修改。如我创建了工程 foo 这个工程的路径是 E:\lindexi\1\Foo\ 那么这个工程就可以被这个文件修改
所以将 Directory.Build.props 文件 放在磁盘文件夹,如E:\\就可以让整个放在 E:\\ 的工程可以被这个文件修改
详细请看 Roslyn 使用 Directory.Build.props 文件定义编译
现在我告诉小伙伴,将这个文件放在你的文件夹内,然后他的控制台项目都会输出 林德熙是逗比是如何做到的?
实际上很简单,我只需要在 Directory.Build.props 定义编译过程,移除原来的所有文件,然后将 输出林德熙是逗比的文件加入到编译,这样就可以
于是来写一个简单的代码,输出 林德熙是逗比 代码很简单
using System; namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("林德熙是逗比");
}
}
}
那么现在的问题是,我刚才说的是将这个文件放在你的项目文件夹,但是要输出林德熙是逗比的代码需要放在一个文件,当然不能放两个文件,那么可以怎么做?简单的方法是使用Roslyn 使用 WriteLinesToFile 解决参数过长无法传入提供的方法,写入文件
先假设写入文件很简单,需要在 Directory.Build.props 文件添加文件所在的路径,然后移除其他的文件
<Project>
<Target Name="T1" BeforeTargets="BeforeBuild"> <PropertyGroup>
<SomeThing>$(IntermediateOutputPath)Foo.cs</SomeThing>
</PropertyGroup> <ItemGroup>
<Compile Remove="@(Compile)"></Compile>
<Compile Include="$(SomeThing)"></Compile>
</ItemGroup>
</Target> </Project>
这里的 SomeThing 就是写入代码的文件,关于 $(IntermediateOutputPath) 请看 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv
在这个 Target 里面就定义了代码文件的路径,然后通过移除现在所有的文件,添加写入的文件的方法,让编译的时候运行的是输出 林德熙是逗比 这里需要注意的是 BeforeTargets 需要写为 编译之前,这样小伙伴看到自己的代码还是原来的代码,但是编译的时候是忽略小伙伴的代码编译刚才写的文件
那么文件写入有哪些难点?第一个就是换行,第二个就是 C# 代码使用分号作为行的最后。但是在 msbuild 使用 分号分开不同的项。在 xml 可以通过 CDATA 让内容不会被转义
<![CDATA[ 不进行转义代码 ]]>
然后可以使用 %3b 代替分号
现在看起来的代码是这样写
<Text>
<![CDATA[
using System%3b namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("林德熙是逗比")%3b
}
}
}
]]>
</Text>
只需要将代码写入文件就可以,在写入之前先删除原有的文件
<Target Name="T1" BeforeTargets="BeforeBuild">
<PropertyGroup>
<SomeThing>$(IntermediateOutputPath)Foo.cs</SomeThing>
<Text>
<![CDATA[
using System%3b
namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("林德熙是逗比")%3b
}
}
}
]]>
</Text>
</PropertyGroup>
<Delete Files="$(SomeThing)" Condition="Exists($(SomeThing))"></Delete>
<WriteLinesToFile File="$(SomeThing)" Lines="$(Text)"></WriteLinesToFile>
<ItemGroup>
<Compile Remove="@(Compile)"></Compile>
<Compile Include="$(SomeThing)"></Compile>
</ItemGroup>
</Target>
全部的代码请看下面,只需要将这个文件放在小伙伴的项目文件夹,就可以让他的控制台项目输出 林德熙是逗比 当然大家可以修改输出,找小伙伴秀一下
<Project>
<Target Name="T1" BeforeTargets="BeforeBuild"> <PropertyGroup>
<SomeThing>$(IntermediateOutputPath)Foo.cs</SomeThing>
<Text>
<![CDATA[
using System%3b namespace CeseacooteeGowgu
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("林德熙是逗比")%3b
}
}
}
]]>
</Text>
</PropertyGroup>
<Delete Files="$(SomeThing)" Condition="Exists($(SomeThing))"></Delete>
<WriteLinesToFile File="$(SomeThing)" Lines="$(Text)"></WriteLinesToFile>
<ItemGroup>
<Compile Remove="@(Compile)"></Compile>
<Compile Include="$(SomeThing)"></Compile>
</ItemGroup>
</Target>
</Project>
2019-4-29-Roslyn-将这个文件放在你的项目文件夹,无论哪个控制台项目都会输出林德熙是逗比...的更多相关文章
- Cocos2dx-3.1.1 冒险01----> 文件夹结构、新项目project创建并执行
windows开发环境:window7.vs2012.python2.7.6 Cocos2d-x 3.1.1的完整文件夹例如以下:比起曾经的2.x的版本号来说分类更规范了 watermark/2/te ...
- Django 修改该项目文件夹、项目名及项目文件夹中同名文件夹,报错 ModuleNotFoundError: No module named 'untitled'
如果你直接重构项目文件夹名及重构项目名和重构项目文件夹内同名文件夹 执行项目报错 ModuleNotFoundError: No module named 'untitled' 请执行以下操作
- dll 日志文件 放在同一个目录。
string strPath = "log.txt"; 如果日志问价跟dll文件放在一起,直接这么些就可以了.
- django中,如何把所有models模型文件放在同一个app目录下?
django的每个app目录下,都有自己的models.py文件. 原则上,每个app涉及的数据库,都会定义在这个文件里. 但是,有的数据库,涉及到多个app应用,不是很方便放在一个单独的app里. ...
- 将properties文件放在Jar包并读取
有时候需要在一个library内部打包一个properties文件,包含一些配置信息,而不能部署在外部. 在maven工程里面,将properties文件放在src/main/resources目录下 ...
- Alpha冲刺(6/10)——2019.4.29
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(6/10)--2019.4.29 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- 解决找不到roslyn\csc.exe文件问题
csc.exe代表C# 编译器,所以在需要项目nuget包引用”Microsoft.CodeDom.Providers.DotNetCompilerPlatform“以及”Microsoft.Net. ...
- YMOI 2019.6.29
题解 YMOI 2019.6.29 放弃FAIOJ,用cena考了一次试.被全方位吊打.. T1 开灯 题面: 在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,--. 每一盏灯只有两种可 ...
- Spring MVC -- UEditor 编辑器整合 上传图片至外部文件夹(非项目文件夹)
上传图片到外部储存,回显图片 下载全部UEditor资源源码 config.json配置 config.json中添加如下属性 (一定要添加此属性): "physicsPath": ...
- 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...
随机推荐
- 记录--Threejs-着色器实现一个水波纹
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 hree.js 是一个基于 WebGL 的 JavaScript 3D 库,用于创建和渲染 3D 图形场景. 一. 图像渲染过程 1.we ...
- 重返ubuntu世界
一直对"重返"两个字充满了情怀感,因为会想起小时候看的一本龙珠同人的标题,它就唤作<重回龙珠世界>.最近这五年基本都是在MacOS下工作和学习的,也习惯用MacOS.就 ...
- html 本地预览图片 图片上绘制矩形框
效果如图 完整html代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" / ...
- 感悟:FPGA的串行及并行设计思路
前言 FPGA设计过程中, 会遇到大量的串行转并行或者并行转串行的问题; 这些问题主要体现在FPGA对于速度和面积的均衡上; 一般而言, FPGA使用并行的设计可以提高处理的速度, 消耗更多的资源; ...
- KingbaseES数据库导入数据invalid byte sequence for encoding
一.适用版本: KingbaseES数据库所有版本. 二.问题现象: 使用备份的数据进行还原,还原过程中发生异常. 日志信息: sys_restore: connecting to database ...
- PyCharm专业版延长使用时间【极简】
关注公众号[靠谱杨阅读人生]回复[py]获取破解包! 准备好最新版本的PyCharm(去官网下载页面上的第一个就可以,我使用的版本如下图所示) 打开软件选择试用,进去之后可以新建一个项目然后把这个压缩 ...
- mybatis添加maven依赖
1 <dependencies> 2 <!--导入Mybatis依赖包--> 3 <dependency> 4 <groupId>org.mybatis ...
- 并发框架 LMAX Disruptor
Introduction Michael Barker edited this page on 2 Mar 2015 · 8 revisions The best way to understan ...
- JS前后端交互(1)项目BotBattle
目录 交互逻辑图解 后端 前端 jQuery的ajax的编程 项目地址 交互逻辑图解 图片来源:XZHongAN 后端 RequestMapping("/pk/") public ...
- TVM 代码生成—TIR to LLVM IR
本文地址:https://www.cnblogs.com/wanger-sjtu/p/17573212.html TVM在编译过程中,经历了 graph LR A[3rd IR] --> B[R ...