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 修改编译
相关文章
- node - 上传文件并且修改名称
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备 亡羊补牢,面试时如果发现回答不好,该怎么办? [UWP]在应用开发中安全使用文件资源 请教:WCF速度似乎比Remoting慢 WinForm的EXE破解(基于IL修改) WebApi实现单个文件的上传下载 Log4Net使用学习笔记 ASP.NET Core2基于RabbitMQ对Web前
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- Java 文件操作二(重命名、设置只读、是否存在、指定目录中创建文件、获取文件修改日期、创建文件、文件路径比较)
- linux 修改文件内容命令
- Android 文件的上传
- java读取写入CSV文件
- Windows 禁用 security center,Windows Defender,打开文件安全警告, 切换到系统到英文,修改日期格式,禁用自动更新
- Spring Boot修改最大上传文件限制:The field file exceeds its maximum permitted size of 1048576 bytes.
- eclipse批量修改文件编码
- mac os 上启用简单http file server web 文件服务器
- git如何查找某文件中每一行的修改情况?
- 文件,文件夹相关操作,批量修改文件名
- WampServer 在 httpd.conf 中配置多站点 (IP 配置法:不用每次修改 hosts 文件 + 域名配置法 )
- hosts文件位置
- Qt数据库应用22-文件编码格式识别
- 控制台程序的中文输出乱码问题(export LC_CTYPE=zh_CN.GBK,或者修改/etc/sysconfig/i18n为zh_CN.GBK。使用setlocale(LC_CTYPE, "");会使用默认办法。编译器会将源码做转换成Unicode格式,或者指定gcc的输入文件的编码参数-finput-charset=GBK。Linux下应该用wprintf(L"%ls/n",wstr))
- 在vscode中通过修改launch.json文件为项目添加启动参数——在launch.json文件中修改args变量
- 根据文件头数据判断文件类型
- asp.net上传图片文件自动修改图片大小代码
- delphi 获取文件的最新修改时间 http://www.delphitop.com/html/wenjian/64.html
- [Spark][Hive]外部文件导入到Hive的例子
- gitlab 默认端口修改文件
- 利用maven与testng来进行测试Maven2 基础教程(3) - pom.xml 文件简介
- [Android Studio]布局文件错误“No orientation specified, and the default is horizontal.This is a common ...“
- Linux - Ubuntu中运行编译或其他任务时提示找不到文件或程序
- C#中使用I/O文件流