public static Assembly NewAssembly(ArrayList arraylist)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler iCodeCompiler =provider.CreateCompiler();
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;
//paras.ReferencedAssemblies.Add("System.dll");
//paras.ReferencedAssemblies.Add("System..Collections.Generic");
//paras.ReferencedAssemblies.Add("System.Test");
//paras.ReferencedAssemblies.Add("System.ComponentModel");
//CodeSnippetCompileUnit cu = new CodeSnippetCompileUnit();
//CompilerResults cr = iCodeCompiler.CompileAssemblyFromDom(paras, cu);
StringBuilder classSource = new StringBuilder();
classSource.Append("public class DynamicClass\n");
classSource.Append("{");
for (int i = 0; i < arraylist.Count; i++)
{
classSource.Append(propertyString(arraylist[i].ToString()));
}
classSource.Append("\n}");
System.Diagnostics.Debug.WriteLine(classSource.ToString());
CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource.ToString());
Assembly assembly = result.CompiledAssembly; return assembly;
}
这样的代码,是没有问题的.但是如果把注销的代码加入,使用注销的代码,那么总是提示"Could not load file or assembly 'file:///C:\Documents and Settings\Admin\Local Settings\Temp\08v8tsod.dll' or one of its dependencies. 系统找不到指定的文件。"
请各位高手指点.十分感谢.
{
CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler iCodeCompiler =provider.CreateCompiler();
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;
//paras.ReferencedAssemblies.Add("System.dll");
//paras.ReferencedAssemblies.Add("System..Collections.Generic");
//paras.ReferencedAssemblies.Add("System.Test");
//paras.ReferencedAssemblies.Add("System.ComponentModel");
//CodeSnippetCompileUnit cu = new CodeSnippetCompileUnit();
//CompilerResults cr = iCodeCompiler.CompileAssemblyFromDom(paras, cu);
StringBuilder classSource = new StringBuilder();
classSource.Append("public class DynamicClass\n");
classSource.Append("{");
for (int i = 0; i < arraylist.Count; i++)
{
classSource.Append(propertyString(arraylist[i].ToString()));
}
classSource.Append("\n}");
System.Diagnostics.Debug.WriteLine(classSource.ToString());
CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource.ToString());
Assembly assembly = result.CompiledAssembly; return assembly;
}
这样的代码,是没有问题的.但是如果把注销的代码加入,使用注销的代码,那么总是提示"Could not load file or assembly 'file:///C:\Documents and Settings\Admin\Local Settings\Temp\08v8tsod.dll' or one of its dependencies. 系统找不到指定的文件。"
请各位高手指点.十分感谢.
解决方案 »
- 关于c#窗体的按照分辨率缩放的问题
- winform tabcontral要在每个标签项间设tab的顺序,要怎样设?好像只能按添加时的顺序,添加后就固定不能变了?
- 想看电影的请进
- 多个下拉框数据绑定的问题,请大家帮忙
- ====简单问题:WinForm里面:如何将用户控件内Panel的事件映射到UserControl的事件?====
- 帮我看一下,这个委托是怎么用的?
- C#.net开发环境能否自动实现类函数转移
- 为什么在设计器属性中修改控件属性,但不在InitializeComponent写入代码呢?
- 动态产生 picturebox
- 急救:各位老大帮忙看看,这个该调用什么指令。多谢
- JS脚本调用函数时参数的传递
- 请教大家一个关于服务器获得数据的问题
-->
paras.ReferencedAssemblies.Add("System.Collections.Generic");
paras.ReferencedAssemblies.Add("System.dll");
//去掉,这个不是DLL文件,而是System里的命名空间
paras.ReferencedAssemblies.Add("System..Collections.Generic");
//这个可能是你的自己的类库,这里需要的是DLL所在的路径加文件名,比如:c:\aaa\aaa\test.dll
paras.ReferencedAssemblies.Add("System.Test");
//去掉,这个不是DLL文件,而是System里的命名空间
paras.ReferencedAssemblies.Add("System.ComponentModel");
System..Collections.Generic
及
System.ComponentModel
两个命名空间,可以在你的代码里写上:classSource.Append("using System.Collections.Generic;\n");
classSource.Append("System.ComponentModel;\n");
classSource.Append("namespace youNS\n");
classSource.Append("{");
classSource.Append("public class DynamicClass\n");
classSource.Append("{");
for (int i = 0; i < arraylist.Count; i++)
{
classSource.Append(propertyString(arraylist[i].ToString()));
}
classSource.Append("\n}");
classSource.Append("\n}");
关于多写了一个"."这是在帖子上的失误,不好意思.在实际VS2005中是没有的.
classSource.Append("using System.Collections.Generic;\n");
classSource.Append("System.ComponentModel;\n");
...
...
...
前两天,当我使用这种方法的时候好象也会是类似错误.说找不到文件.
十分感谢您的回复.我正在研究您的代码.
也感谢上次您对我PROPERTYGIRD控件疑问的解答.谢谢
classSource.Append("using System.Collections.Generic;\n");
classSource.Append("System.ComponentModel;\n");
classSource.Append("namespace youNS\n");
生成如下:
using System.Collections.Generic;
System.ComponentModel;
namespace WindowsAppTes
{
public class DynamicClass
{
private string _unitId;
public string unitId
{
get{return _unitId;}
set{ _unitId = value; }
}
private string _unitIdd;
public string unitIdd
{
get{return _unitIdd;}
set{ _unitIdd = value; }
}
}
}
但是assembly这里还是提示:Could not load file or assembly 'file:///C:\Documents and Settings\Admin\Local Settings\Temp\pfp9jelx.dll' or one of its dependencies. 系统找不到指定的文件。
显示内容是:The type or namespace name 'ComponentModel' does not exist in the namespace 'System' (are you missing an assembly reference?)
可是我前面有写:
classSource.Append("using System.Collections.Generic;\n");
classSource.Append("using System;\n");
classSource.Append("using System.Text;\n");
classSource.Append("using System.ComponentModel;\n");
这个错误有点迷惑.我生成的classSource字符:
using System.Collections.Generic;
using System;
using System.Text;
using System.ComponentModel;
namespace WindowsAppTest
{
public class DynamicClass
{
private string _unitId;
public string unitId
{
get{return _unitId;}
set{ _unitId = value; }
}
private string _unitIdd;
public string unitIdd
{
get{return _unitIdd;}
set{ _unitIdd = value; }
}
}
}
classSource.Append("using System;\n");
classSource.Append("using System.Text;\n");
[color=#FF6600] classSource.Append("using System.ComponentModel;\n"); [/color]
如果把这个红色的这一行删除,完全可以正常运行.
如果加入这一行,总是说我提示:The type or namespace name 'ComponentModel' does not exist in the namespace 'System' (are you missing an assembly reference?)
这句还有没?
//paras.ReferencedAssemblies.Add("System.Collections.Generic");
//paras.ReferencedAssemblies.Add("System.Test");
//paras.ReferencedAssemblies.Add("System.ComponentModel");
//CodeNamespace codeNamespace = new CodeNamespace("WindowsAppTest");
//CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
//codeCompileUnit.Namespaces.Add(codeNamespace);
这些全都注掉了
发现仅仅使用classResource.Append("....")就可以使用了.
调用都是没问题的
现在就是14,15楼的问题没办法解决
谢谢关注:)
paras.ReferencedAssemblies.Add("System.dll");
public static Assembly NewAssembly(ArrayList arraylist)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;
paras.ReferencedAssemblies.Add("System.dll"); CodeSnippetCompileUnit cu = new CodeSnippetCompileUnit();
StringBuilder classSource = new StringBuilder();
classSource.Append("using System;\n");
classSource.Append("using System.Collections.Generic;\n");
classSource.Append("using System.ComponentModel;\n");
classSource.Append("namespace youNS\n");
classSource.Append("{\n");
classSource.Append("\tpublic class DynamicClass\n");
classSource.Append("\t{\n");
for (int i = 0; i < arraylist.Count; i++)
{
classSource.Append(propertyString(arraylist[i].ToString()));
}
classSource.Append("\t}\n");
classSource.Append("}\n");
CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource.ToString());
Assembly assembly = result.CompiledAssembly; return assembly;
}
在CSDN交流的同时还可以交到一些朋友.真是高兴.
方法也和您的一样.
少了 paras.ReferencedAssemblies.Add("System.dll");这么一句.没有把System.dll加入.
十分感谢您的回复.