<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#動態生成代碼和程序集

      以下代碼動態生成cs文件

      編譯為Assembly 

      之后可以使用AppDomain.Load 加載程序集,并新建類型

      public static void Test()
      {
      //聲明代碼的部分
      CodeCompileUnit compunit = new CodeCompileUnit();
      CodeNamespace sample
      = new CodeNamespace("命名空間");
      compunit.Namespaces.Add(sample);

      //引用命名空間
      sample.Imports.Add(new CodeNamespaceImport("System"));//導入System命名空間
      sample.Imports.Add(new CodeNamespaceImport("System.Linq"));//導入System.Linq命名空間

      //在命名空間下添加一個類
      CodeTypeDeclaration wrapProxyClass = new CodeTypeDeclaration("類名");
      //wrapProxyClass.BaseTypes.Add(baseType);// 如果需要的話 在這里聲明繼承關系 (基類 , 接口)
      wrapProxyClass.CustomAttributes.Add(new CodeAttributeDeclaration("Serializable"));//添加一個Attribute到class上
      sample.Types.Add(wrapProxyClass);//把這個類添加到命名空間 ,待會兒才會編譯這個類

      //為這個類添加一個無參構造函數 其實不添加也沒事的, 只是做個demo而已
      CodeConstructor constructor = new CodeConstructor();
      constructor.Attributes
      = MemberAttributes.Public;
      wrapProxyClass.Members.Add(constructor);


      //為這個類添加一個方法 public override int 方法名(string str);
      System.CodeDom.CodeMemberMethod method = new CodeMemberMethod();
      method.Name
      = "方法名";
      method.Attributes
      = MemberAttributes.Override | MemberAttributes.Public;//聲明方法是公開 并且override的
      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(string ), "str")); //這個方法添加一個輸入參數
      method.ReturnType =new CodeTypeReference( typeof(int));//聲明返回值的類型
      method.Statements.Add(new CodeSnippetStatement(" return 1; ")); //方法體里面很簡單 直接返回 一個1;



      CSharpCodeProvider cprovider
      = new CSharpCodeProvider();

      ICodeGenerator gen
      = cprovider.CreateGenerator();
      StringBuilder fileContent
      = new StringBuilder();
      using (StringWriter sw = new StringWriter(fileContent))
      {
      gen.GenerateCodeFromCompileUnit(compunit, sw,
      new CodeGeneratorOptions());//想把生成的代碼保存為cs文件
      }

      ICodeCompiler compiler
      = cprovider.CreateCompiler();

      //編譯參數
      CompilerParameters cp = new CompilerParameters();
      cp.ReferencedAssemblies.Add(
      "System.dll");//剛才引用了命名空間 這里是添加引用
      cp.ReferencedAssemblies.Add("System.Core.dll");//剛才引用了命名空間 這里是添加引用

      cp.OutputAssembly
      = "輸出dll的位置";
      cp.GenerateInMemory
      = false; //是否只在內存中生成
      cp.IncludeDebugInformation = true;//包含調試符號 pdb文件
      cp.GenerateExecutable = false;//生成dll,不是exe
      cp.WarningLevel = 4;
      cp.TreatWarningsAsErrors
      = false;

      string filePath = "生成cs文件的保存位置";
      File.WriteAllText(filePath, fileContent.ToString());
      CompilerResults cr
      = compiler.CompileAssemblyFromFile(cp, filePath); //保存文件再進行編譯 待會兒調試就比較方便了 ,可以直接斷點到剛才生成的文件里面
      // CompilerResults cr = compiler.CompileAssemblyFromDom(cp, compunit); //這樣的生成 不用寫文件 ,就是調試麻煩
      String outputMessage = "";
      foreach (var item in cr.Output)
      {
      outputMessage
      += item + Environment.NewLine;//調試的最終輸出信息
      }
      if (cr.Errors.Count > 0)//有編譯錯誤就拋出異常
      {
      throw new Exception("error:" + Environment.NewLine + outputMessage);
      }

      }

      posted on 2011-02-17 16:33  聽說讀寫  閱讀(7572)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产精品高清一区二区三区不卡| 国产中文三级全黄| 国产成人免费一区二区三区| 吉首市| 女子spa高潮呻吟抽搐| 国产精品午夜福利视频| 人人人澡人人肉久久精品| 国产三级精品三级在线观看| 亚洲精品自拍在线视频| 欧美大胆老熟妇乱子伦视频| 精品国产一区av天美传媒| 亚洲国产精品无码观看久久| 青青草无码免费一二三区| 亚洲国产欧美在线观看| 日韩精品福利一区二区三区| 日韩毛片在线视频x| 内射极品少妇xxxxxhd| 亚洲深夜精品在线观看| 农民人伦一区二区三区| 亚洲欧美日韩综合在线丁香| 无码人妻丝袜在线视频| 潘金莲高清dvd碟片| 99精品国产中文字幕| 亚洲成AV人片在线观高清| 免费人成再在线观看网站| 精品国产一区二区三区av性色| 久久午夜私人影院| 加勒比无码专区中文字幕| 四虎成人精品国产永久免费| 亚洲av午夜福利大精品| 国产三级黄色片在线观看| 精品亚洲国产成人av制服| 国产一区日韩二区欧美三区| 亚洲高清国产拍精品熟女| 无码中文字幕热热久久| 亚洲精品欧美综合二区| 亚洲av本道一区二区| 成A人片亚洲日本久久| 国产精品视频白浆免费视频| 青青国产揄拍视频| 中文字幕一区二区三区四区五区|