Tag: codedom

CodeDomProvider.CompileAssemblyFromSource – 找不到Roslyn(csc.exe)

我们最近从旧的CodeDomProvider升级到名为Microsoft.CodeDom.Providers.DotNetCompilerPlatform的新Roslyn CodeDomProvider。 它工作正常,但它在错误的地方寻找csc.exe。 NuGet包将exe放在路径中: [App Path] \ bin \ Debug \ roslyn 但是,当我们编译时,我们得到这个错误: 无法找到路径'[App Path] \ bin \ Debug \ bin \ roslyn \ csc.exe’的一部分。 请注意,它正在寻找错误位置的exe。 它正在bin \ Debug文件夹中的“bin”文件夹中查找它。 因此,为了使我们的代码编译,我们需要将Roslyn编译器移动到:[App Path] \ bin \ Debug \ bin \ roslyn \ csc.exe 有没有办法告诉CodeDomProvider Roslyn编译器所在的位置? 这不仅仅是Roslyn编译器代码中的一个直接错误吗?

使用CodeDom终结器?

是否可以将Finalizer添加到CodeDom生成的类中(除了使用CodeSnippetTypeMember)? 我在MSDN上找不到任何关于它的信息。

如何将我的解决方案中的另一个项目(程序集)添加到CompilerParameters.ReferencedAssemblies集?

假设我有一串代码,如下所示,我在主项目中编译。 但我想在CustomClass中实现一个接口。 界面位于我的解决方案中的另一个项目中(我的主项目中的部分引用)当我这样做时 公共类CustomClass:InterfaceType 我收到这样的错误。 如何在动态代码中引用其他项目以便我可以使用接口和其他类? c:\ Users \ xxx \ AppData \ Local \ Temp \ m8ed4ow-.0.cs(1,32:错误CS0246:找不到类型或命名空间名称’InterfaceType’(您是否缺少using指令或程序集引用) ?) string code2 = ” public class CustomClass : InterfaceType ” + ” {” + ” }”; // Compiler and CompilerParameters CSharpCodeProvider codeProvider = new CSharpCodeProvider(); CompilerParameters compParameters = new CompilerParameters(); compParameters.GenerateInMemory = false; //default //compParameters.TempFiles = […]

如何使用CodeDom创建一个接口方法

我正在使用CodeDom生成我的WCF服务接口和实现文件。 我在CodeMemberMethod上找不到任何可以生成接口方法的选项。 如果我使用MemberAttributes.Abstract,我几乎就在那里,但它包含对接口无效的abstract关键字。 有谁知道生成方法的正确语法? 这是我为生成接口文件而开发的代码:private void CreateServiceContractFile(Type entity,BoElement bo,DirectoryInfo serviceOutputDir,AppParameters appPrams){CodeCompileUnit serviceFileUnit = new CodeCompileUnit(); CodeNamespace importNameSpace = new CodeNamespace(“”); importNameSpace.Imports.Add(new CodeNamespaceImport(“System”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Collections.Generic”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Linq”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Runtime.Serialization”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ServiceModel”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ServiceModel.Web”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Text”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALVIN.BusinessObjects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“DAOObjects = ALVIN.DAO”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.BusinessObjects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Data.Entity.Validation”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ComponentModel.DataAnnotations”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Data.Objects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.Common.Utility”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.EventMessages”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.ServiceCommon”)); importNameSpace.Imports.Add(new […]

如何使用C#选择CodeDom编译器的目标框架?

所以我有一个用C#编写的CodeDOM编译器,它应该根据其中一个资源编译另一个应用程序。 我如何更改资源(或编译器的输出可执行文件)的目标.NET框架?

如何使用CodeDom更改访问者的可访问性?

在C#中,您可以在属性的访问器上拥有更多限制性访问器,如下所示: public List Name { get; protected set; } 使用CodeDom生成代码时如何实现这一目标?

设置codeDOM文件的文件版本

我正在寻找为使用codeDOM生成的exe文件设置文件版本的任何方法。 我的总是0.0.0.0。 编程显然是首选,但在这一点上,任何东西都会好于没有。

使用CodeDOM将程序集添加到BuildManager导致间歇性错误

我正在使用CodeDOM在运行时创建内存中的程序集,如下所示: public Assembly Compile(CodeCompileUnit targetUnit) { string path = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath); var compilerParameters = new CompilerParameters { GenerateInMemory = true, IncludeDebugInformation = true, TreatWarningsAsErrors = true, WarningLevel = 4, CompilerOptions = “/nostdlib”, }; //For system.dll compilerParameters.ReferencedAssemblies.Add(typeof(System.Diagnostics.Debug).Assembly.Location); //For system.core.dll compilerParameters.ReferencedAssemblies.Add(typeof(System.IO.DirectoryInfo).Assembly.Location); //For Microsoft.CSharp.dll compilerParameters.ReferencedAssemblies.Add(typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.Location); compilerParameters.ReferencedAssemblies.Add(typeof(System.Runtime.CompilerServices.CallSite).Assembly.Location); //Add other assemblies as needed. var compilerResults = new CSharpCodeProvider() .CompileAssemblyFromDom(compilerParameters, targetUnit); […]

CodeDomgenerics类型约束

有没有办法用CodeDom生成类约束。 因为当我使用类似的东西 var method = new CodeMemberMethod(); var genericParam = new CodeTypeParameter(“InterfaceType”); genericParam.Constraints.Add(“class”); method.TypeParameters.Add(genericParam); 生成的代码就像 private InterfaceType GetImpl() where InterfaceType : @class { } 我发现最好的解决方法是在课前使用前导空格 genericParam.Constraints.Add(” class”); 但这似乎充其量只是一种解决方法。

了解C#中运行时代码生成的各种选项(Roslyn,CodeDom,Linq Expressions,…?)

我正在开发一个应用程序,我想动态生成用于数值计算的代码(用于性能)。 将此计算作为数据驱动操作太慢。 要描述我的要求,请考虑以下类: class Simulation { Dictionary nodes; double t, dt; private void ProcessOneSample() { t += dt; // Expensive operation that computes the state of nodes at the current t. } public void Process(int N, IDictionary Input, IDictionary Output) { for (int i = 0; i < N; ++i) { foreach (KeyValuePair j in […]