C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序。

□ C#文件编译为程序集

→在F盘创建as文件夹
→在as文件夹下创建MyClass.cs
→用记事本打开编写如下代码,并保存

using System;
public class MyClass
{
    public static void PrintSth()
    {
        Console.WriteLine("Hello");
    }
}

→打开"VS2012开发人员命令提示",输入如下命令,并按回车

→输入如下命令把MyClass.cs编译成MyClass.dll程序集文件,并按回车

查看F盘下的as文件夹中,多了一个MyClass.dll程序集

□ IL文件编译为程序集

→在as文件夹下创建SecondClass.il
→用记事本打开编写如下代码,并保存

.assembly SecondClassAssembly {}

.assembly extern mscorlib {}

.class public SecondClass extends [mscorlib]system.object{
    .method public static void PrintSth() cil managed{
        ldstr "hello from IL"
        call void [mscorlib]System.Console::WriteLine(string)
        ret
    }
}

→输入如下命令

→按回车,看到如下界面

查看F盘下的as文件夹中,多了一个SecondClassAssembly.dll程序集

→查看as文件夹下的dll文件,输入如下命令,并按回车

□ 使用程序集运行程序

→在as文件夹下创建MainClass.cs
→用记事本打开编写如下代码,并保存

using System;

class MainClass
{
    static void Main()
    {
        MyClass.PrintSth();
    }
}

→打开"VS2012开发人员命令提示",输入如下命令,并按回车


查看F盘下的as文件夹中,多了一个MainClass.exe程序集

→继续输入如下命令,并按回车

时间: 2024-12-20 16:30:38

C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序的相关文章

C#程序集系列02,使用记事本查看可执行程序集的IL代码

继续上一篇"C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序",在F盘的as文件夹中已经有了若干程序集.本篇体验使用记事本查看可执行程序集的IL代码. →打开"VS2012开发人员命令提示",输入如下命令,并按回车在as文件夹中多了1.txt和1.res这2个文件→输入如下命令打开1.txt // Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.18020

C#程序集系列13,如何让CLR选择不同版本的程序集

本篇主要体验,在存在多个版本程序集的情况下,如何让CLR选择哪个版本程序集运行,以及程序集版本的切换. 分别生成非强名称程序集不同版本 □ 生成某个版本的程序集 →清理F盘as文件夹,剩下如下文件 →查看Cow.cs文件 using System; using System.Reflection; [assembly: AssemblyVersion("3.3.3.3")] public class Cow { public static void Moo() { Console.Wr

C#程序集系列09,程序集签名

在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程序集所在文件夹创建密匙→打印密匙密匙是一堆乱码,这是经过加密了.→在密匙的基础上创建公匙Public Key→打印公匙Public Key注意:这里的public token是public key经过哈希算法而获得的.当程序集被引用,该程序集对外是以public token形式存在的. →现在重新编译&quo

C#程序集系列06,程序集清单,EXE和DLL的区别

CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→把MainClass.cs编译成程序集→反编译MyDll.dll,在1.txt文件中呈现 ildasm /out:1.txt MyDll.dll →打开1.txt文件 1.txt // Metadata version: v4.0.30319 .assembly extern mscorlib {

C#程序集系列08,设置程序集版本

区别一个程序集,不仅仅是程序集名称,还包括程序集版本.程序集公匙.程序集文化等,本篇体验通过界面和编码设置程序集版本. □ 通过Visual Studio设置程序集版本 →右键项目,选择"属性",选择"应用程序"→点击"程序集信息",设置如下,点击确定→点击项目Properties文件夹下的AssemblyInfo.cs,可以看到程序集版本已经设置生效[assembly: AssemblyVersion("3.3.3.3")]

C#程序集系列07,篡改程序集

以下几个方面用来区分不同的程序集:○ 程序集名称:Name○ 程序集版本:Version○ 程序集公匙: Public Token○ 程序集文化:Culture 如果没有很严格地按照上面的几个方面来创建程序集,程序集是很容易被篡改的.本篇体验篡改程序集. →清空F盘as文件夹下的所有文件→在as文件夹下创建Dog.cs类,用记事本打开,编写如下,保存 using System; public class Dog { public static void MakeSound() { Console

C#程序集系列03,引用多个module

我们经常在项目中引用程序集.通常情况下,一个程序集包含一个module,但一个程序集也可以包含多个module.本篇就来体验:在一个可以被编译成.exe可执行文件的.cs文件中引用多个module. □ 创建第一个module→在前面2篇文章中,F盘的as文件夹中存放了若干程序集等文件.→打开"VS2012开发人员命令提示",输入如下命令,最终清空了F盘的as文件夹中的所有内容→在F盘的as文件夹中创建MyFirstModule.cs,用记事本打开编写如下代码,并保存 using Sy

C#程序集系列05,让程序集包含多个module

本篇体验在一个程序集中包含多个module. □ 创建3个module →删除F盘as文件夹中的一些文件,只剩下如下3个文件→用记事本打开MyFirstModule.cs文件,修改如下,并保存 using System; public class MyFirstModule { public static void Hello() { Console.WriteLine("来自module 1的问候~"); } } →用记事本打开MySecondModule.cs文件,修改如下,并保存

C#程序集系列04,在程序集包含多个module的场景下理解关键字internal

本篇在一个程序集包含多个module的场景下体验internal的含义. →查看F盘as文件夹下的文件→删除MainClass.exe→把MyFirstModule和MySecondModule组装到一个程序集中去现在,MyDll.dll程序集中包含了2个module.→反编译,把MyDLL.dll的IL代码显示到3.txt文件中→打开3.txt文件 // Metadata version: v4.0.30319 .assembly extern mscorlib { .publickeytok