这可能是一个奇怪的问题。
我需要延迟绑定未编译的c#类(.cs)。甚至不确定这是否可行。该课程不会成为项目的一部分或被引用。我唯一知道的是它的文件位置。
该文件不会在执行时编译,因为它将成为网站app_code的一部分。只需尝试创建它的一个实例,然后调用它上面的函数。
这甚至可能吗?
提前致谢
答案 0 :(得分:1)
听起来你想在运行时编译和引用你的类。这绝对是可能的。
本文应指出正确的方向...... http://support.microsoft.com/kb/304655
请记住,一旦将程序集加载到内存中,除非卸载整个App Domain,否则无法卸载它。因此,如果您需要能够卸载代码,则必须将其加载到新的AppDomain中。
答案 1 :(得分:1)
你没有问过编译,所以我假设你只想实例化该类并使用它。
您应该让类实现一个涵盖所需功能的接口,然后您可以使用Activator class实例化它:
ObjectHandle fooHandle = Activator.CreateInstanceFrom(
@"C:\somePath\FooAssembly.dll", "FooNamespace.Foo");
IFoo foo = (IFoo)fooHandle.Unwrap();
该类应该有一个默认的构造函数。如上所述按名称加载程序集时,请考虑安全隐患。
答案 2 :(得分:0)
您可以使用CodeProvider类
CodeDomProvider cdp = Microsoft.CSharp.CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults cr = cdp.CompileAssemblyFromFile(<CompilerParameters>,<string [] of files to compiler>);
只需根据需要替换正确的对象即可 以及实际文件名的字符串数组。
您也可以将代码加载到字符串中并直接从那里编译
然后可以在
中找到生成的程序集cr.CompiledAssembly