Tag: codedom

使用DLR运行使用CompileAssemblyFromSource生成的代码?

继续这个优秀的答案后 ,我想知道使用dynamic关键字的DLR是否允许为生成的程序集编写代码的方式更简洁。 例如,上述答案的代码可以: using (Microsoft.CSharp.CSharpCodeProvider foo = new Microsoft.CSharp.CSharpCodeProvider()) { var res = foo.CompileAssemblyFromSource( new System.CodeDom.Compiler.CompilerParameters() { GenerateInMemory = true }, “public class FooClass { public string Execute() { return \”output!\”;}}” ); var type = res.CompiledAssembly.GetType(“FooClass”); var obj = Activator.CreateInstance(type); var output = type.GetMethod(“Execute”).Invoke(obj, new object[] { }); } 变成这样的东西: using (Microsoft.CSharp.CSharpCodeProvider foo = new […]

您能简单解释一下CodeDOM的用途和用于一个简单的现实生活示例吗?

您能简单解释一下CodeDOM的用途和用于一个简单的现实生活示例吗? 一个简单的例子,涵盖了为什么我需要它作为开发人员,在什么情况下? 谢谢

使用.NET的CodeDom创建枚举

我想使用CodeDom API创建一个Enumeration。 我在互联网上搜索得足够多,我得到的结果几乎没用。 我想要产生的是 public enum bug_tracker_type { [Description(“Bugzilla”)] Bugzilla, [Description(“Debbugs”)] Debbugs, [Description(“PHP Project Bugtracker”)] PHP_Project_Bugtracker, [Description(“Google Code”)] Google_Code } 我使用了CodeTypeDeclaration并将它的IsEnum属性设置为true,创建了一个名称,并设置了它的属性。 现在最大的问题是如何填充身体? 我试过了 CodeTypeMember mem = new CodeTypeMember(); mem.Name = WadlSharpUtils.CreateIdentifier(discreteValue.value); mem.CustomAttributes.Add(new CodeAttributeDeclaration(discreteValue.value)); // enumCandidate is an instance of CodeTypeDeclaration enumCandidate.Members.Add(mem); 虽然使用这个解决方案我可以生成Description属性,但行尾会是; 而不是,

如何以编程方式解析和修改C#代码

我想要做的是阅读C#代码,解析它,插入一些方法调用并最终编译它。 是否可以将C#源代码(字符串列表)转换为CodeDOM对象?

错误“不包含静态”主“适用于入口点的方法

当我尝试使用CodeDom编译源代码时出现此错误 不包含适用于入口点的静态“主”方法! 我已经用Google搜索并在此处阅读其他答案,但我不知道如何修复它。 有人可以帮帮我吗? 这是我的源代码: http : //picz.to/image/ao5n ^ private void button2_Click(object sender, EventArgs e) { SaveFileDialog d = new SaveFileDialog(); d.Filter = “Executable (*.exe)|*.exe”; if (d.ShowDialog() == DialogResult.OK) { string source = Properties.Resources.source; CompilerParameters param = new CompilerParameters(); param.CompilerOptions += “/target:winexe” + ” ” + “/win32icon:” + “\”” + textBox1.Text + “\””; param.GenerateExecutable = […]

使用System.CodeDom生成扩展方法

有没有人试过在.NET 4.0下使用System.CodeDom生成扩展方法? 似乎没有任何方法可以将CodeMemberMethod或CodeParameterDeclarationExpression指定为扩展方法/参数。 如果这是不可能的,有什么好的解决方法吗? 谢谢

如何使用CodeDOM定位特定语言版本?

使用C#代码提供程序和ICodeCompiler.CompileAssemblyFromSource方法,我试图编译代码文件以生成可执行程序集。 我想编译的代码使用了可选参数和扩展方法等function,这些function仅在使用C#4语言时才可用。 话虽如此,我想编译的代码只需要(并且需要 )以.NET Framework 2.0版为目标。 使用前面的代码可以避免任何与语法有关的编译时错误,但是,生成的程序集将针对框架的4.0版本,这是不合需要的。 var compiler = new CSharpCodeProvider( new Dictionary { { “CompilerVersion”, “v4.0” } } ); 我怎样才能使代码提供程序针对语言版本4.0但生成一个只需要框架版本2.0的程序集?

C#4.0:表达式树与CodeDom

Expression树和CodeDom有什么区别? 我应该在哪种情况下使用哪个?

在CodeDomProvider(rosyln)中使用C#6function

CodeDomProvider objCodeCompiler = CodeDomProvider.CreateProvider( “CSharp” ); CompilerParameters objCompilerParameters = new CompilerParameters(); … CompilerResults objCompileResults = objCodeCompiler.CompileAssemblyFromFile( objCompilerParameters, files.ToArray() ); 当我编译我的文件时,我得到: FileFunctions.cs(347):错误:意外字符’$’ 有没有人知道如何使用CodeDom编译进行字符串插值? 我找到了这个链接: 如何使用CSharpCodeProvider定位.net 4.5? 所以我尝试过: var providerOptions = new Dictionary(); providerOptions.Add( “CompilerVersion”, “v4.0” ); // Instantiate the compiler. CodeDomProvider objCodeCompiler = CodeDomProvider.CreateProvider( “CSharp”, providerOptions ); 但我仍然得到同样的错误。 我还将目标框架更新为.NET Framework 4.6。 注意:我不能指定“v4.5”或“v4.6”或者我会得到: ************** Exception Text ************** […]

如何将嵌入式资源作为字节数组读取而不将其写入磁盘?

在我的应用程序中,我使用CodeDom.Compiler从source.cs文件编译另一个程序,并在编译时使用以下命令嵌入一些资源(exe和dll文件): // …. rest of code if (provider.Supports(GeneratorSupport.Resources)) { cp.EmbeddedResources.Add(“MyFile.exe”); } if (provider.Supports(GeneratorSupport.Resources)) { cp.EmbeddedResources.Add(“New.dll”); } // ….rest of code 在编译文件中,我需要将嵌入资源作为字节数组读取。 现在我通过使用下面的函数和使用将资源提取到磁盘来实现这一点 File.ReadAllBytes(“extractedfile.exe”); File.ReadAllBytes(“extracteddll.dll”); 我使用此函数将两个文件解压缩到磁盘后执行此操作: public static void ExtractSaveResource(String filename, String location) { // Assembly assembly = Assembly.GetExecutingAssembly(); System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); // Stream stream = assembly.GetManifestResourceStream(“Installer.Properties.mydll.dll”); // or whatever // string my_namespace = a.GetName().Name.ToString(); […]