【发布时间】:2015-05-05 12:50:20
【问题描述】:
我正在使用 CodeDOM 编译代码。首先它编译得很完美,但现在我在代码行 16 处遇到了问题:
1 public void GenerateAssembly (bool inMemory, string assemblyName) {
2 CompilerParameters cp = new CompilerParameters();
3 cp.GenerateExecutable = false;
4 cp.GenerateInMemory = inMemory;
5 cp.OutputAssembly = assemblyName;
6 cp.ReferencedAssemblies.Add("mscorlib.dll");
7 cp.ReferencedAssemblies.Add("System.dll");
8 cp.ReferencedAssemblies.Add("System.Core.dll");
9 cp.ReferencedAssemblies.Add("System.Data.Linq.dll");
10 cp.ReferencedAssemblies.Add("System.Data.Entity.dll");
11 var providerOptions = new Dictionary<string, string>();
12 providerOptions.Add("CompilerVersion", "v4.0");
13 CodeDomProvider compiler = CodeDomProvider.CreateProvider("C#", providerOptions);
14 compiler.CompileAssemblyFromSource(compilationParameters, sourceCode)
15 buildErrors = compilationResult.Errors;
16 lastBuild = compilationResult.CompiledAssembly;
17 }
我得到的错误是:
FileNotFoundException
Could not load file or assembly 'file:///[project_location]\bin\Debug\Dynamic.dll'
or one of its dependencies. The system cannot find the file specified.
编辑 1 源代码是什么?
对不起,我忘了附上所有的课,在这里你可以完整地看到它:
1 public class CustomCompile {
2 private string[] sourceCode;
3 public string[] SourceCode { get { return sourceCode; } }
4 public CompilerErrorCompilation buildErrors;
5 public Assembly lastBuild;
6 public CustomCompile (string[] sourceCode) {
7 this.sourceCode = sourceCode;
8 }
9 public void GenerateAssembly (bool inMemory, string assemblyName) {
10 CompilerParameters cp = new CompilerParameters();
11 cp.GenerateExecutable = false;
12 cp.GenerateInMemory = inMemory;
13 cp.OutputAssembly = assemblyName;
14 cp.ReferencedAssemblies.Add("mscorlib.dll");
15 cp.ReferencedAssemblies.Add("System.dll");
16 cp.ReferencedAssemblies.Add("System.Core.dll");
17 cp.ReferencedAssemblies.Add("System.Data.Linq.dll");
18 cp.ReferencedAssemblies.Add("System.Data.Entity.dll");
19 var providerOptions = new Dictionary<string, string>();
20 providerOptions.Add("CompilerVersion", "v4.0");
21 CodeDomProvider compiler = CodeDomProvider.CreateProvider("C#", providerOptions);
22 compiler.CompileAssemblyFromSource(compilationParameters, sourceCode)
23 buildErrors = compilationResult.Errors;
24 lastBuild = compilationResult.CompiledAssembly;
25 }
26 }
编辑 2 示例
var scriptA = "using System;\nusing System.Collection;\nclass Test {\n\tvoid Init () { Console.WriteLine (\"Void Init got called\"); }\n}";
var compile = new CustomCompile(new string[] {});
compile.GenerateAssembly (false, "Dynamic.dll");
// -- or --
compile.GenerateAssembly (true, "Dynamic.dll");
第二次
var compile = new CustomCompile(new string[] {System.IO.File.ReadAllText ("C:\\Users\\[Username]\\Desktop\\CommandExecuter - Copy.cs")});
compile.GenerateAssembly (false, "Dynamic.dll");
// -- or --
compile.GenerateAssembly (true, "Dynamic.dll");
【问题讨论】:
-
sourceCode中有什么内容? -
string[] sourceCode,包含我需要在程序集中编译的所有代码
-
我明白,但它实际上包含什么,比如举个例子。
-
@RonBeyer 加了2个例子,都是工作中实际用到的
-
当您收到此错误时,构建错误中是否包含任何内容?
标签: c# compilation codedom