从另一个刚刚编译的程序集编译程序集

2024-04-27

我需要在内存中编译程序集,这样可以编译另一个程序集。有一个带有一个按钮的表格。这是表单的代码

using System;
using System.IO;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.CSharp;

namespace testC
{
    public partial class Form1 : Form
    {static string str_tb;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            openkubik();
        }
        private void openkubik()
        {
            Thread th = new Thread(new ThreadStart(sborkakub));
            th.Start();
        }

        private void sborkakub()
        {
            System.Security.Policy.Evidence evi = AppDomain.CurrentDomain.Evidence;
            AppDomain assemblyDomain;
            AppDomainSetup assemblyDomainSetup = new AppDomainSetup();
            assemblyDomainSetup.ApplicationBase = System.Environment.CurrentDirectory;
            assemblyDomainSetup.DisallowBindingRedirects = false;
            assemblyDomainSetup.DisallowCodeDownload = true;
            assemblyDomainSetup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            assemblyDomainSetup.LoaderOptimization = LoaderOptimization.MultiDomainHost;
            assemblyDomain = AppDomain.CreateDomain("AssemblyDomain", evi, assemblyDomainSetup);
            assemblyDomain.DoCallBack(assamblykub);
        }

        private static void assamblykub() {
        createtext();
        System.CodeDom.Compiler.CodeDomProvider objCodeCompiler = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
        System.CodeDom.Compiler.CompilerParameters objCompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
            foreach (System.Reflection.Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
            objCompilerParameters.ReferencedAssemblies.Add(asm.Location);
        }
        objCompilerParameters.CompilerOptions = "/target:winexe";
        objCompilerParameters.GenerateExecutable = true;
        objCompilerParameters.GenerateInMemory = true;
        objCompilerParameters.IncludeDebugInformation = false;
        System.CodeDom.Compiler.CompilerResults objCompileResults = objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, str_tb);
        if (objCompileResults.Errors.HasErrors) {
            MessageBox.Show(String.Format("Error: Line>{0}, {1} # {2}", objCompileResults.Errors[0].Line, objCompileResults.Errors[0].ErrorText, objCompileResults.Errors[0].ErrorNumber));
            return;
        }
        System.Reflection.Assembly objAssembly = objCompileResults.CompiledAssembly;
        object objTheClass = objAssembly.CreateInstance("MainClass");
        if ((objTheClass == null)) {
            MessageBox.Show("Can\'t load class...");
            return;
        }
        try {
            objTheClass.GetType().InvokeMember("Main", System.Reflection.BindingFlags.InvokeMethod, null, objTheClass, null);
        }
        catch (Exception ex) {
             MessageBox.Show(("Error:" + ex.Message));
        }
    }

        private static void createtext()
        {
            FileStream tempfile = new FileStream((Application.StartupPath + "/temp_open.txt"), FileMode.Open, FileAccess.Read);
            StreamReader tempfilesr = new StreamReader(tempfile, System.Text.Encoding.GetEncoding(1251));
            str_tb = tempfilesr.ReadToEnd();
            tempfilesr.Close();
            tempfile.Close();
            tempfile = null;
            tempfilesr = null;
        }
    }
}

以及“temp_open.txt”文件的代码

using System;
using System.IO;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


    public partial class MainClass : MarshalByRefObject
    {
public static void Main()
{
             Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
}
}
    public class Form1 : Form
    {static string str_tb;
        private System.ComponentModel.IContainer components = null;

        private System.Windows.Forms.Button button1;

           protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            this.button1.Location = new System.Drawing.Point(45, 44);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(313, 52);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(425, 143);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
 }
      public Form1()
        {    
           InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            openkubik();
        }
        private void openkubik()
        {
            Thread th = new Thread(new ThreadStart(sborkakub));
            th.Start();
        }

        private void sborkakub()
        {
            System.Security.Policy.Evidence evi = AppDomain.CurrentDomain.Evidence;
            AppDomain assemblyDomain;
            AppDomainSetup assemblyDomainSetup = new AppDomainSetup();
            assemblyDomainSetup.ApplicationBase = System.Environment.CurrentDirectory;
            assemblyDomainSetup.DisallowBindingRedirects = false;
            assemblyDomainSetup.DisallowCodeDownload = true;
            assemblyDomainSetup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            assemblyDomainSetup.LoaderOptimization = LoaderOptimization.MultiDomainHost;
            assemblyDomain = AppDomain.CreateDomain("AssemblyDomain", evi, assemblyDomainSetup);
            assemblyDomain.DoCallBack(assamblykub);
        }

        private static void assamblykub() {
        createtext();
        System.CodeDom.Compiler.CodeDomProvider objCodeCompiler = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
        System.CodeDom.Compiler.CompilerParameters objCompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
            foreach (System.Reflection.Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
            objCompilerParameters.ReferencedAssemblies.Add(asm.Location);
        }
        objCompilerParameters.CompilerOptions = "/target:winexe";
        objCompilerParameters.GenerateExecutable = true;
        objCompilerParameters.GenerateInMemory = true;
        objCompilerParameters.IncludeDebugInformation = false;
        System.CodeDom.Compiler.CompilerResults objCompileResults = objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, str_tb);
        if (objCompileResults.Errors.HasErrors) {
            MessageBox.Show(String.Format("Error: Line>{0}, {1} # {2}", objCompileResults.Errors[0].Line, objCompileResults.Errors[0].ErrorText, objCompileResults.Errors[0].ErrorNumber));
            return;
        }
        System.Reflection.Assembly objAssembly = objCompileResults.CompiledAssembly;
        object objTheClass = objAssembly.CreateInstance("MainClass");
        if ((objTheClass == null)) {
            MessageBox.Show("Can\'t load class...");
            return;
        }
        try {
            objTheClass.GetType().InvokeMember("Main", System.Reflection.BindingFlags.InvokeMethod, null, objTheClass, null);
        }
        catch (Exception ex) {
             MessageBox.Show(("Error:" + ex.Message));
        }
    }

        private static void createtext()
        {
            FileStream tempfile = new FileStream((Application.StartupPath + "/temp_open.txt"), FileMode.Open, FileAccess.Read);
            StreamReader tempfilesr = new StreamReader(tempfile, System.Text.Encoding.GetEncoding(1251));
            str_tb = tempfilesr.ReadToEnd();
            tempfilesr.Close();
            tempfile.Close();
            tempfile = null;
            tempfilesr = null;
        }
}

当我在第一种形式中单击 Button1 时 -> 出现第二种形式。但是当我单击第二种形式中的按钮 1 时,出现 FileNotFound 异常。我究竟做错了什么?


非常模糊的样本...
为什么你想打电话assamblykub() with assemblyDomain.DoCallBack(assamblykub);???这种方法适用于跨域调用。
只需更换assemblyDomain.DoCallBack(assamblykub); with assamblykub()然后你就会让它运行)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个刚刚编译的程序集编译程序集 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何通过 XAML 绑定设置当前 CultureUI

    我有一个绑定到字符串的 TextBlock 我希望该字符串以应用程序的当前 UI 区域性显示 我想在 XAML 中执行此操作 文本块很简单 如下所示
  • 如何从 type=file 输入中删除“未选择文件”?

    我似乎无法找到任何方法来删除显示在 文件 类型的输入旁边的 未选择文件 文本 你们知道如何删除此文本吗 input type file color transparent Enjoy
  • 如何将tmux热键设置为Ctrl-,即Ctrl+逗号

    我在 Mac OS X 上设置首选 tmux 热键时遇到了一些麻烦 The most common hotkeys that invokes tmux s magics are CTRL A and CTRL B But I would r
  • Internet Explorer 8 不会修改打印样式表中的 HTML5 标记

    我之前正在制作打印样式表 并遇到了 IE8 的问题 我正在使用 HTML5 和几个布局标签 包括页眉 导航和页脚 由于某种原因 在我的打印样式表中显示 无 这些标签上的声明在 IE8 中被忽略 我只能假设后续的较低版本 我首先认为 IE9
  • Javascript 弹出窗口会消失

    我需要有一个类似消息框的东西 但没有按钮 它会显示在屏幕上All data was saved然后在 2 3 秒内消失 这就像一个警报 我们提醒用户记录已保存 但我需要它显示在屏幕顶部的一个小框中 并且它应该淡出 有人可以帮我编写一个可以执
  • 将一些提交移至另一个分支

    我只有一个分支有 git repo A B C D E master 我想将提交 B C 和 D 拆分到另一个名为开发的分支 A E master B C D develop 做到这一点最简单的方法是什么 无需关心远程仓库 做cherry
  • `/dev/urandom` 适合模拟目的吗?

    似乎在类 Unix 系统中使用纯 C fread from dev urandom是提取高质量随机字节的最简单方法 我需要运行一个每秒需要大约 10k 32 位随机数的模拟 并且可能会运行几天 是 dev urandom可以用于此目的吗 当
  • 根据具有重复测量的其他列的条件向列添加值

    我对 R 还很陌生 正在尝试在 Rstudio 中准备我的数据集以供进一步分析 如果有人能帮助我找到代码的解决方案 我将不胜感激 我的数据叫做m8 这就是我到目前为止所做的 但它只返回整个 Q2 列中 U1High U1Low 和 U1Me
  • 如何对加密算法进行逆向工程?

    我编写了一个以这种方式加密文本的应用程序 获取输入文本 反转文本 转换为十六进制 用密钥进行异或 Base64编码 现在 我自己没有做很多加密 编码 所以我的问题可能听起来很愚蠢 但是 假设我得到一个包含上述算法内容的文件 而我不知道这个算
  • 如何修改 HttpUrlConnection 的标头

    我试图稍微改进一下 Java Html 文档 但我遇到了问题HttpUrlConntion 有一件事是 如果用户代理是 Java VM 某些服务器会阻止请求 另一个问题是HttpUrlConnection不设置Referrer or Loc
  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • D3.js - 如何迭代数据集中的子数组

    我试图让 d3 迭代数据中的子数组并生成多个饼图 这是完整的代码 来自https gist github com mbostock 1305111 https gist github com mbostock 1305111 and htt
  • 为 ListView 最后一个元素添加下边距

    我需要添加具有复杂项目背景的 ListView 顶部和底部的偶数 奇数和圆角不同 它看起来像这样 我已经通过级别列表实现了所有这些东西 但我还想做一件事 现在底部项目位于屏幕底部附近 最好添加一些空间 我不想向 ListView 添加底部边
  • 如何将 3D 图像输出到 3D 电视?

    我有一台 3D 电视 如果我不至少尝试让它显示我自己创作的漂亮 3D 图像 我就会逃避我的责任 作为一个极客 我之前已经完成了非常基本的 OpenGL 编程 因此我了解所涉及的概念 假设我可以为自己渲染一个简单的四面体或立方体并使其旋转一点
  • 将 Java `sort` 签名转换为 `? super T` 到​​ Scala(泛型)

    问题 看着这个问题 https stackoverflow com questions 16430355 translating generic 20wildcards from java to scala关于迁移 Java 签名 publ
  • Microsoft 计算机视觉 API 或 Google 的 Cloud Vision API 是否可以获取对象的位置?

    我正在尝试开发一个需要知道图像中标记对象位置的应用程序 知道图像中有一架 钢琴 还不够 我需要知道钢琴在图像中的位置 微软的计算机视觉 API 和谷歌的云视觉 API 都提供了某种形式的裁剪建议 智能缩略图生成服务 这让我认为某些对象的位置
  • 在groovy中将变量标记为final是否有意义?

    我想知道变量如何标记为final由 Groovy 解释 在 1 8 0 1 8 1 中 我知道这在 Java 中是有意义的 并且可以提高性能 当然还有助于避免愚蠢的错误 我想了解如果final可以帮助java编译器优化用Groovy编写的程
  • 如何在iOS Mantle模型子类中设置默认值

    interface Entity property assign int searchTotalPagesAll property assign int searchTotalPagesIdeas end implementation En
  • 如何检查每个观察中的最小日期并动态更新标志

    我必须每次检查最短日期并向其添加 30 天并相应地设置字段 例如 我的桌子 ID StartDate EndDate 1 2017 01 01 2017 02 01 1 2017 01 09 2017 01 28 1 2017 04 01
  • 从另一个刚刚编译的程序集编译程序集

    我需要在内存中编译程序集 这样可以编译另一个程序集 有一个带有一个按钮的表格 这是表单的代码 using System using System IO using System CodeDom using System CodeDom Co