我hava小窗口的應用程序,其中用戶輸入代碼和按鈕單擊事件代碼在運行時編譯。運行時代碼編譯給出的錯誤 - 進程無法訪問文件
當我第一次點擊按鈕時,它工作正常,但如果多次點擊同一個按鈕,它會給出錯誤「該進程無法訪問Exmaple.pdb文件,因爲它正在被另一個進程使用」。。下面的示例代碼示例
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "Example" + ".exe", true); //iloop.ToString() +
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"using System.Linq;
class Program {
public static void Main(string[] args) {}
public static string Main1(int abc) {" + textBox1.Text.ToString()
+ @"
}
}");
results.Errors.Cast<CompilerError>().ToList().ForEach(error => Error = error.ErrorText.ToString());
var scriptClass = results.CompiledAssembly.GetType("Program");
var scriptMethod1 = scriptClass.GetMethod("Main1", BindingFlags.Static | BindingFlags.Public);
StringBuilder st = new StringBuilder(scriptMethod1.Invoke(null, new object[] { 10 }).ToString());
result = Convert.ToBoolean(st.ToString());
}
}
}
我如何解決這個問題,所以,如果我點擊同一個按鈕不止一次..它應能正常工作。
感謝,
任何線索..來解決這個問題? – sia 2014-10-30 14:47:47