当前位置: 首页 > wzjs >正文

如何做网站公证如何搭建一个app

如何做网站公证,如何搭建一个app,精品网游,吉林智能网站建设制作以前C#脚本用的委托注入模式,今天在AI提示下,尝试用脚本直接实现接口,然后C#可以动态或指定新类型创建接口实现对象。从代码角度看,稍显复杂,但脚本方面显得更简洁和有条理。 引用包需要Microsoft.CodeAnalysis、Micro…

       以前C#脚本用的委托注入模式,今天在AI提示下,尝试用脚本直接实现接口,然后C#可以动态或指定新类型创建接口实现对象。从代码角度看,稍显复杂,但脚本方面显得更简洁和有条理。

    引用包需要Microsoft.CodeAnalysis、Microsoft.CodeAnalysis.Common等,其他自动添加:

<?xml version="1.0" encoding="utf-8"?>
<packages><package id="Humanizer.Core" version="2.14.1" targetFramework="net472" /><package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.Analyzers" version="3.11.0" targetFramework="net472" developmentDependency="true" /><package id="Microsoft.CodeAnalysis.Common" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.CSharp" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.Scripting.Common" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.VisualBasic" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CodeAnalysis.Workspaces.Common" version="4.13.0" targetFramework="net472" /><package id="Microsoft.CSharp" version="4.7.0" targetFramework="net472" /><package id="System.Buffers" version="4.5.1" targetFramework="net472" /><package id="System.Collections.Immutable" version="8.0.0" targetFramework="net472" /><package id="System.Composition" version="8.0.0" targetFramework="net472" /><package id="System.Composition.AttributedModel" version="8.0.0" targetFramework="net472" /><package id="System.Composition.Convention" version="8.0.0" targetFramework="net472" /><package id="System.Composition.Hosting" version="8.0.0" targetFramework="net472" /><package id="System.Composition.Runtime" version="8.0.0" targetFramework="net472" /><package id="System.Composition.TypedParts" version="8.0.0" targetFramework="net472" /><package id="System.IO.Pipelines" version="8.0.0" targetFramework="net472" /><package id="System.Memory" version="4.5.5" targetFramework="net472" /><package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /><package id="System.Reflection.Metadata" version="8.0.0" targetFramework="net472" /><package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" /><package id="System.Text.Encoding.CodePages" version="7.0.0" targetFramework="net472" /><package id="System.Threading.Channels" version="7.0.0" targetFramework="net472" /><package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
</packages>

      接口定义如下:

namespace WindowsFormsApp1
{public interface IFlexiblePluginAgent{string RegistDrType();}
}

验证文件TextFile1.txt如下:

using System;
using System.Collections.Generic;public class FlexiblePluginAgentProcessScriptXXXX : WindowsFormsApp1.IFlexiblePluginAgent
{public string RegistDrType(){return "scritp_drv";}
}

加载和验证代码如下:

using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Emit;
using Microsoft.CodeAnalysis;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;namespace WindowsFormsApp1
{internal static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){ScriptTest();}static void ScriptTest(){try{// 读取外部代码文件string codeFilePath = "TextFile1.txt";string sourceCode = File.ReadAllText(codeFilePath);var compilation = CSharpCompilation.Create("DynamicAssembly").WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)).AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location)).AddReferences(MetadataReference.CreateFromFile(typeof(IFlexiblePluginAgent).Assembly.Location)).AddSyntaxTrees(CSharpSyntaxTree.ParseText(sourceCode));// 检查编译错误var diagnostics = compilation.GetDiagnostics();if (diagnostics.HasAnyErrors()){Console.WriteLine("编译错误:");foreach (var diagnostic in diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error)){Console.WriteLine(diagnostic.ToString());}return;}// 内存中生成程序集using (var ms = new MemoryStream()){EmitResult emitResult = compilation.Emit(ms);if (!emitResult.Success){Console.WriteLine("程序集生成失败:");foreach (var diagnostic in emitResult.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error)){Console.WriteLine(diagnostic.ToString());}return;}ms.Seek(0, SeekOrigin.Begin);Assembly assembly = Assembly.Load(ms.ToArray());Console.WriteLine("---检查程序集中是否有IFlexiblePluginAgent的派生类---");var derivedTypes = assembly.DefinedTypes.Where(t => typeof(IFlexiblePluginAgent).IsAssignableFrom(t) && !t.IsInterface).ToList();if (derivedTypes.Any()){Console.WriteLine("找到以下IFlexiblePluginAgent的派生类:");foreach (var type in derivedTypes){Console.WriteLine($"  - {type.FullName}");}// 使用第一个派生类创建对象Type agentType = derivedTypes.First().AsType();IFlexiblePluginAgent agent = (IFlexiblePluginAgent)Activator.CreateInstance(agentType);string result = agent.RegistDrType();Console.WriteLine($"注册的 DrType 是: {result}");}else{Console.WriteLine("未找到IFlexiblePluginAgent的派生类");}Console.WriteLine("---知道类名字直接调用---");Type agentType2 = assembly.GetType("FlexiblePluginAgentProcessScriptXXXX");if (agentType2 == null){Console.WriteLine("未找到 MyPluginAgent 类型");return;}IFlexiblePluginAgent agent2 = (IFlexiblePluginAgent)Activator.CreateInstance(agentType2);string result2 = agent2.RegistDrType();Console.WriteLine($"注册的 DrType 是: {result2}");}}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}}}// 扩展方法用于检查诊断信息public static class DiagnosticExtensions{public static bool HasAnyErrors(this IEnumerable<Diagnostic> diagnostics){return diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error);}}
}

代码托管地址:GitHub - PascalMing/CodeAnalysisInterface: C#脚本实现接口并加载验证

http://www.dtcms.com/wzjs/603019.html

相关文章:

  • 台州公司建站模板本地wordpress安装教程
  • 洪梅镇网站建设深圳福永
  • 企业网站建设设计任务书广告公司名称大全最新
  • 怎么能创建自己的网站p2p网站开发的多少钱
  • 怎么给网站有一字做标记洋河门户平台
  • 网站商城建设要多少钱网站管理系统 手机
  • 设计广告公司网站建设做牛津纺衬衫的网站
  • 赣州人才网站区块链开发公司
  • 网站建设和优化内容最重要性Wordpress 微博评论
  • 综合门户网站什么意思江苏城乡与住房建设部网站
  • 公司网站建设情况说明学编程的培训机构
  • 政务网站建设具体指导意见Wordpress 跨域登录
  • 网站后台安全传播易广告投放平台
  • 旅游网站开发流程恒大地产
  • 我要在58上面做网站网站的描述 都应该写 什么 优化
  • 公司网站可以自己做怎么看网站备案号
  • 如何做网站插件网站域名详解
  • 推广网站发布文章简单的网站设计开发
  • 奉贤区做网站一个网站的后台怎么做
  • pc网站是什么app和微网站的区别
  • 长沙网站建设长沙建设银行网络设计一个月多少钱
  • 韩雪冬个人网站哪些网站可以做淘宝推广
  • 恩施网站定制广州番禺区怎么样
  • 现在哪个网站做网站好手机网站推荐大全
  • 网站群建设意见国外 图片网站
  • 参考文献 教学网站建设网页版微信可以发朋友圈吗
  • 网站建设捌金手指下拉八小红书推广怎么做
  • 注册个人网站要钱吗怎么建立公司网站?
  • 手机建行网站浙江建设厅官方网站
  • 肇庆网站关键词优化中资建筑信息平台