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>

上面的代码的意思就是移除 CompileFoo 替换.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 修改编译

参见:专栏:Roslyn 入门 - CSDN博客

2018-8-29-Roslyn-通过-Target-修改编译的文件的更多相关文章

  1. Keil V5.1x命令“Build Target”重新编译所有文件

    网上的解决办法有多种,但不知道哪一种能对症,以下是我的解决方法:

  2. Roslyn 使用 Target 替换占位符方式生成 nuget 打包

    本文告诉大家如何编写在编译过程修改打包文件 在项目文件的相同文件夹可以放一个 nuspec 用来告诉 VisualStudio 如何打包 现在尝试创建一个项目 NearjerbetearDeeyito ...

  3. 几何服务,cut功能,输入要素target(修改后)内容。

    几何服务,cut功能测试,输入要素target(修改后)内容. {"displayFieldName":"","fieldAliases": ...

  4. 几何服务,cut功能,输入要素target(修改前)内容。

    几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...

  5. 用 ilasm 反编译、修改.net dll文件

    有些.net dll我们没有源码,如果要修改某些东西,可以用ilasm.exe反编译为il代码,修改后再编译回dll ilasm通常放在以下路径 C:\Windows\Microsoft.NET\Fr ...

  6. 记2018/4/29 qbxt 测试

    记 2018/4/29  qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...

  7. 前端开发环境之GRUNT自动WATCH压缩JS文件与编译SASS文件环境下Ruby安装sass常见错误分析

    前言: 1.sass编译为css文件,早先时刻写css,后来看了sass挺不错的,于是在新的项目中开始使用上了sass.(grunt需要ruby环境,所以需要先安装ruby,sass环境) ①安装ru ...

  8. Roslyn 如何使用 MSBuild Copy 复制文件

    本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本. 在 MSBuild 里可以使用很多命令,本文告诉大家如何 ...

  9. Maven项目中,编译proto文件成Java类

    新建Maven项目 新建一个 Maven 项目: pom定义了最小的maven2元素,即:groupId,artifactId,version. groupId:项目或者组织的唯一标志,并且配置时生成 ...

随机推荐

  1. CPA专业阶段单科成绩有5年有效期限,即从通过科目考试的第一年算起

    你为什么不去参加注册会计师考试? 注册会计师考试出考率极低,大家都有自己的原因,可以客观地说,每年注会考场出考人数不足三成,到底是什么原因不去考试呢?大家是这么说的. 1.没有好好复习呗,还怎么去考试 ...

  2. Docker学习入门

    Docker简介: Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,就理解了 Docker 的整个生命周期. Docke ...

  3. MyEclipse6.5安装SVN插件方法

    MyEclipse6.5安装SVN插件,掌握了几种方法,本节就像大家介绍一下MyEclipse6.5安装SVN插件的三种方法,看完本文你肯定有不少收获,希望本文能教会你更多东西. 一.安装方法: My ...

  4. Luogu P2066 机器分配(dp)

    P2066 机器分配 题面 题目背景 无 题目描述 总公司拥有高效设备 \(M\) 台,准备分给下属的 \(N\) 个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这 \(M\ ...

  5. jquery判断元素是否出现在可视区

      在我们的日常开发中,经常会遇到当元素出现在可视区的时候需要去出发某一事件的情况.我最近在优化环球网首页的时候,将非可视区的代码全部放入到webComponent中.打算当这个元素出现在可视区的时候 ...

  6. 03Redis入门指南笔记(事务、生存时间、排序、消息通知、管道)

    一:事务 1:概述 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行. 事务的原理是是先将属于一个事务 ...

  7. nslookup查不到数据

    ch查不到数据 换一个ip就可以了,什么原理?

  8. 使用Pycharm写一个网络爬虫

    在初步了解网络爬虫之后,我们接下来就要动手运用Python来爬取网页了. 我们知道,网络爬虫应用一般分为两个步骤: 1.通过网页链接获取内容: 2.对获得的网页内容进行处理 这两个步骤需要分别使用不同 ...

  9. 工作记录--使用FFmpeg将一个视频文件中音频合成到另一个视频中

    由于工作需要,临时被老大吩咐去研究一个FFmpeg工具,通过linux命令行去将一个视频中的音频提取出来并合成到另一个视频中,最终的效果是要保证2个视频中的音频都在一个视频中播放. 但是本人对FFmp ...

  10. Java借助itext pdf生成固定格式pdf的模板工具类

    这里是标题区域 这里是副标题1: 副标题的内容 这里是副标题2: 这里是副标题2的内容 这里是副标题3: 这里是副标题3的内容 序号 表头1 复合表头 表头2 子表头1 子表头2 子表头3 1 居左内 ...