以下是一个示例代码,演示如何创建一个动态程序集,并将 MAC 地址保存到程序集的 ManifestResource 中,并在读取程序集后获取 MAC 地址:

using System;
using System.IO;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Resources;

namespace DynamicAssemblyExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取 MAC 地址
            string macAddress = GetMacAddress();

            // 创建动态程序集
            Assembly dynamicAssembly = CreateDynamicAssembly(macAddress);

            // 保存程序集到文件
            string assemblyPath = SaveAssemblyToFile(dynamicAssembly);

            // 读取程序集
            Assembly loadedAssembly = Assembly.LoadFile(assemblyPath);

            // 从程序集的 ManifestResource 中获取 MAC 地址
            string loadedMacAddress = GetMacAddressFromAssembly(loadedAssembly);

            // 验证读取到的 MAC 地址是否与保存的 MAC 地址相同
            if (loadedMacAddress == macAddress)
            {
                Console.WriteLine("MAC 地址读取成功!");
            }
            else
            {
                Console.WriteLine("MAC 地址读取失败!");
            }

            Console.ReadLine();
        }

        static string GetMacAddress()
        {
            // 获取第一个网卡的 MAC 地址
            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
            if (networkInterfaces.Length > 0)
            {
                return networkInterfaces[0].GetPhysicalAddress().ToString();
            }

            return string.Empty;
        }

        static Assembly CreateDynamicAssembly(string macAddress)
        {
            // 创建动态程序集
            AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
            AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);

            // 创建动态模块
            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule", "DynamicAssembly.dll");

            // 创建资源写入器
            ResourceWriter resourceWriter = new ResourceWriter("DynamicAssembly.resources");

            // 将 MAC 地址保存到资源文件中
            resourceWriter.AddResource("MACAddress", macAddress);

            // 保存资源文件
            resourceWriter.Generate();

            // 创建类型并保存到动态模块中
            TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
            typeBuilder.CreateType();

            // 保存动态程序集到文件
            assemblyBuilder.Save("DynamicAssembly.dll");

            return assemblyBuilder;
        }

        static string SaveAssemblyToFile(Assembly dynamicAssembly)
        {
            // 保存动态程序集到文件
            string assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DynamicAssembly.dll");
            File.WriteAllBytes(assemblyPath, dynamicAssembly.GetRawAssembly());

            return assemblyPath;
        }

        static string GetMacAddressFromAssembly(Assembly assembly)
        {
            // 从程序集的 ManifestResource 中获取 MAC 地址
            using (Stream resourceStream = assembly.GetManifestResourceStream("DynamicAssembly.resources"))
            {
                if (resourceStream != null)
                {
                    using (ResourceReader resourceReader = new ResourceReader(resourceStream))
                    {
                        foreach (DictionaryEntry entry in resourceReader)
                        {
                            if (entry.Key.ToString() == "MACAddress")
                            {
                                return entry.Value.ToString();
                            }
                        }
                    }
                }
            }

            return string.Empty;
        }
    }
}

请注意,此代码需要在具有管理员权限的环境中运行,以获取系统的 MAC 地址


原文地址: https://www.cveoy.top/t/topic/hPIa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录