2018-8-29-Roslyn-通过-Target-修改编译的文件
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
Roslyn 通过 Target 修改编译的文件
|
lindexi
|
2018-08-29 09:10:46 +0800
|
2018-08-24 08:54:35 +0800
|
Roslyn MSBuild 编译器
|
本文告诉大家如何使用 Target 进行修改编译时的文件
本文也是带着一个任务来开始。任务就是本渣是一个腹黑的开发者,想要在开发的过程替换一个文件,让开发者在编译出来的文件和他调用的文件是两个不同的文件。
所以下面让我告诉大家整个任务的过程,先创建一个项目
创建项目
这里推荐创建一个 dotnet core 控制台项目,因为创建这个项目就是使用 VisualStudio 2017 新的格式
如果创建的是其他的项目,请看我的博客转换为 VisualStudio 2017 新的格式
创建替换的文件
现在来创建两个不同的文件,其中一个文件是让开发者可以看到的文件,第二个文件是用来替换的实际的文件。
创建的文件是
Foo.cs
Foo 替换.cs
这里的两个文件需要隐藏Foo 替换.cs文件,隐藏的方法请看下面
打开项目文件,通过右击项目编辑
<ItemGroup>
<Compile Remove="Foo 替换.cs" Visible="false"></Compile>
</ItemGroup>
上面的代码的意思就是移除 Compile 的 Foo 替换.cs 文件,并且设置不可见
实际设置了移除就可以不设置不可见
类的属性
为了让大家可以看到两个类的不相同,所以我在两个类添加了不同的代码
//Foo.cs
class Foo
{
public string Name { get; set; } = "德熙是逗比";
}
//Foo 替换.cs
class Foo
{
public string Name { get; set; } = "欢迎访问我博客 http://blog.csdn.net/lindexi_gd 里面有大量 UWP、WPF、dotnetcore 相关";
}
这时在主函数调用一下
static void Main(string[] args)
{
var foo = new Foo();
Console.WriteLine(foo.Name); while (true)
{
Console.Read();
}
}
编译时替换
如果运行了上面的代码,大家也知道会输出什么,但是腹黑的本渣就在编译的时候替换文件
先创建一个 Target 在项目文件,创建一个 Target 需要告诉 Target 的命名和触发的时间
<Target Name="DrumearDatroLanecereso" BeforeTargets="BeforeBuild"> </Target>
这里的触发时间就是在编译之前,注意BeforeBuild是需要用户编译才会运行
现在知道了一个在用户编译之前的 Target 就可以在里面将两个文件替换
<Target Name="DrumearDatroLanecereso" BeforeTargets="BeforeBuild">
<ItemGroup>
<Compile Remove="Foo.cs" Visible="false"></Compile>
<Compile Include="Foo 替换.cs" Visible="false"></Compile>
</ItemGroup>
</Target>
上面代码是移除 Foo.cs 引用另一个替换的文件,所以这时运行一下就会发现输出的是
欢迎访问我博客 http://blog.csdn.net/lindexi_gd 里面有大量 UWP、WPF、dotnetcore 相关
通过这个方法就可以在编译时替换文件,也就是给开发者看到很漂亮的代码,以为就是很简单的写法,然后在编译的时候就将很好看的代码替换为很乱的代码。
这个方法可以用来做 xaml 的资源引用方式,用来做混淆。还有哪些使用方法就需要大家在开发时去想。
更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译
2018-8-29-Roslyn-通过-Target-修改编译的文件的更多相关文章
- Keil V5.1x命令“Build Target”重新编译所有文件
网上的解决办法有多种,但不知道哪一种能对症,以下是我的解决方法:
- Roslyn 使用 Target 替换占位符方式生成 nuget 打包
本文告诉大家如何编写在编译过程修改打包文件 在项目文件的相同文件夹可以放一个 nuspec 用来告诉 VisualStudio 如何打包 现在尝试创建一个项目 NearjerbetearDeeyito ...
- 几何服务,cut功能,输入要素target(修改后)内容。
几何服务,cut功能测试,输入要素target(修改后)内容. {"displayFieldName":"","fieldAliases": ...
- 几何服务,cut功能,输入要素target(修改前)内容。
几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...
- 用 ilasm 反编译、修改.net dll文件
有些.net dll我们没有源码,如果要修改某些东西,可以用ilasm.exe反编译为il代码,修改后再编译回dll ilasm通常放在以下路径 C:\Windows\Microsoft.NET\Fr ...
- 记2018/4/29 qbxt 测试
记 2018/4/29 qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...
- 前端开发环境之GRUNT自动WATCH压缩JS文件与编译SASS文件环境下Ruby安装sass常见错误分析
前言: 1.sass编译为css文件,早先时刻写css,后来看了sass挺不错的,于是在新的项目中开始使用上了sass.(grunt需要ruby环境,所以需要先安装ruby,sass环境) ①安装ru ...
- Roslyn 如何使用 MSBuild Copy 复制文件
本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本. 在 MSBuild 里可以使用很多命令,本文告诉大家如何 ...
- Maven项目中,编译proto文件成Java类
新建Maven项目 新建一个 Maven 项目: pom定义了最小的maven2元素,即:groupId,artifactId,version. groupId:项目或者组织的唯一标志,并且配置时生成 ...
随机推荐
- mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- numpy库数组属性查看:类型、尺寸、形状、维度
import numpy as np q = np.array([1,2,3,4],dtype=np.complex128) print("数据类型",type(q)) ...
- 01Redis入门指南笔记(简介、安装、配置)
一:简介 Redis是一个开源的高性能key-value数据库.Redis是Remote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议 ...
- 微信Web开发者工具报错:net::ERR_BLOCKED_BY_CLIENT
今天在微信调试琳德的拼团,用了挺久之后,输入什么测试地址:发现页面空白,console提示身份验证网址错误,错误类型为:net::ERR_BLOCKED_BY_CLIENT, 尝试了好多次.以为是我的 ...
- 一个页面多个bootstrip轮播以及一个页面多个swiper轮播 冲突问题
Bootstript轮播冲突 解决方法: 使用不同的id <div id="myCarousel1" class="carousel slide"> ...
- laravel-admin 报错 Disk [admin] not configured, please add a disk config in `config/filesystems.php`.
在config/filesystems.php中添加: 'disks' => [ 'local' => [ 'driver' => 'local', 'r ...
- 彻底删除 Git 项目中的文件(BFG Repo-Cleaner 用法)
一些时候由于开发初期经验不足和贪图方便, 会把一些不应该提交到 Git 的文件上传到 Github, 带来一系列安全问题, 更有可能是把一些大文件上传到 GitHub 上, 导致项目非常臃肿, 每次 ...
- mybatis深入理解(七)-----MyBatis缓存机制的设计与实现
缓存设计 MyBatis将数据缓存设计成两级结构,分为一级缓存.二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存.一级缓存是 ...
- linux追加中文字库,解决imagemagick 中文乱码的问题。
Windows下的字体丰富多样,而且显示的工整.漂亮. 所以自己想把windows上的字体移到Ubuntu下来.Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windo ...
- Hystrix线程池配置
Hystrix配置文件配置 断路器: hystrix.command.default.circuitBreaker.requestVolumeThreshold(当在配置时间窗口内达到此数量的失败后, ...