问题标签 [csharpcodeprovider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何在 C# 中动态(运行时)编译和执行用户定义的公式?
我想用 c# 编写一段代码,它能够编译和执行在 windows 窗体中作为字符串(有效的 c# 代码)输入的用户定义的公式。有没有一种简单而优雅的方法来做到这一点?
例如,请参见下面的方法:
用户输入的公式字符串可以包含任何内容,只要它是有效的 c# 代码即可。在上面的示例中,用户在参数表单的文本区域中输入以下字符串:
c# - CSharpCodeProvider:引用不同版本的引用程序集
假设 ProjectMain
有对 Project 的引用Ref
。在Main
中,我定义了一个CSharpCodeProvider
并使用它在运行时编译代码。
在运行时编译的代码可能需要更新版本的 ProjectRef
才能正确运行。所以我尝试Ref.Dll
在相对子文件夹(plugins
)中添加新的:
我还添加了以下内容:
问题是当我尝试动态编译脚本时,Ref.dll
正在使用主文件夹中的并导致错误。
Ref
那么,仅针对我的脚本引用新项目的最佳方式是什么?
PS 我真的更喜欢不必创建另一个 AppDomain,因为动态执行的代码与当前 AppDomain 中加载的代码相耦合,无法分离。
c# - 从包含源代码的字符串创建类对象
我正在创建一个 C# 应用程序,其中代码在运行时编译,代码包含在一个字符串中(字符串从 ScintillaNET 控件获取其值,它只返回文本,带有代码的字符串按预期工作)。
我的问题是:有没有办法在运行时从这个源代码制作某种类对象?例如,字符串包含以下值:
此代码由我的 CSharpCodeProvider 编译器在运行时编译(使用 CompileAssemblyFromSourceBatch - 因为我正在传递要编译的类数组)。但是,我希望能够在运行时设置编译器的 MainClass 属性,这需要从类中获取命名空间。
所以我正在考虑为每个类源代码字符串创建某种对象,这将使我能够实现我的目标。当然也欢迎任何其他想法。
c# - 使用 csharpcodeprovider 检测自动生成的 C# 源代码中的修改
我需要检测何时存在 C# 代码中的任何修改,生成后使用 CSharpCodeProvider 自动生成。
是否存在任何内置解决方案?我可以制作我的解决方案(在评论中添加 CRC)......但我搜索了 .NET 框架提供的内置解决方案。
我检查了 #Pragma checksum,但它只检测源代码和二进制文件之间的修改。
c# - 如何在不重新编译的情况下从 CSharpCodeProvider 访问已编译的程序集
我有 Microsoft.CSharp.CSharpCodeProvider CompileAssemblyFromSource 工作。它肯定会创造并返回我需要的东西。
我知道编译后的代码最终会出现在程序集中,并且在应用程序域被处置之前不能被删除。
您如何重用编译后的调用,而不必每次都调用 CompileAssemblyFromSource(myParams, myScript)?
如果我设置 myParams.OutputAssembly = 'MyAssembly"; 我似乎无法实例化它的实例。
如果代码在内存中,我如何检查它是否存在以及如何在不调用 CompileAssemblyFromSource() 的情况下重新加载它?
c# - 编译函数从弦上飞
我有一个string input;
带有一些代码的字符串(以下所有内容都在该字符串中)
现在,我想实现以下场景:
我假设实际的 T1、TResult 是已知的(这里:字符串、字符串),并且该输入被命名为“s”。我可以这样实现:
但这是相当复杂的方式。如果我知道我只想要一个Func<T1, TResult>
,而不是整个编译的程序集,实例化类(或调用一个静态方法),有什么方法可以简化这一点?
当然,我可以使用这段代码,并把它打扮得很好——将它包装在一个泛型类中,获取 T1、TResult 类型名称以放入TempClass
模板(String.Format("public {0} temp_func({1} s)",typeof(TResult).Name, typeof(T1).Name);
)中,但它有一种润滑方形轮轴的感觉骑行更顺畅...
c# - badimageformatexception 动态代码生成
我正在尝试使用 CSharpCodeProvider 动态生成可执行文件,其唯一目的是从特定的 dll 调用一个方法。当我执行生成的文件时,我得到一个 BadImageFormatException。
我已经将平台设置为 x86。当我手动编写调用该方法的代码并在 Visual Studio 中对其进行调试时,它工作得非常好。
这是可执行文件的代码:
在动态编译代码之前,我通过添加程序集
我将可执行文件写入与 dll 相同的目录。
编辑
这是我用来调用编译器的代码:
c# - 在 .Net MVC 中使用 CSharpCodeProvider 的性能问题
我有一个要求,用户可以在数据库中创建和存储条件
例如。如果(FB > 5000)则 100 否则 200
它工作正常用户可以创建公式,但我的主要问题是执行该公式
所以在运行时FB
被特定值替换并生成正确的字符串
即int a;如果(6000 > 5000){a=100}否则{a=200}
要在运行时执行上述方法,我使用过CSharpCodeProvider
它也可以正常工作,但我的问题是它花费了太多时间,即性能非常慢,所以有没有其他方法可以达到同样的效果???
c# - 如何在运行时使用 C# CSharpCodeProvider 和 BinaryFormatter 编译可序列化对象
所以,
我有以下代码作为文本:
我想在运行时使用 CSharpCodeProvider 编译上述代码。
以下是我的编译方式:
问题是编译后,我需要使用 BinaryFormatter 对其进行序列化并将其保存到文件中。
虽然我已经用Serializable
标签标记了类,但我不断收到以下错误:
程序集“3k0rfezm,版本=0.0.0.0,文化=中性,PublicKeyToken=null”中的类型“EntityModels.ActionInstance”未标记为可序列化。
我真的不知道如何从这里开始。不幸的是,CSharpCodeProvider 和 BinaryFormatter 是要求的一部分。非常感谢任何帮助。
干杯!
c# - 将对象插入/注入到字符串代码
我有一个在运行时动态生成的 C# 代码System.CodeDom.CodeCompileUnit
,我使用 编译它Microsoft.CSharp.CSharpCodeProvider
,我想要的是在这个字符串中插入一个已经定义和初始化的变量(一个 ArrayList),这样我就可以在编译之前使用它,我应该怎么做?