引用未编译的c#类

时间:2009-09-21 10:00:38

标签: c# binding reference

这可能是一个奇怪的问题。

我需要延迟绑定未编译的c#类(.cs)。甚至不确定这是否可行。该课程不会成为项目的一部分或被引用。我唯一知道的是它的文件位置。

该文件不会在执行时编译,因为它将成为网站app_code的一部分。只需尝试创建它的一个实例,然后调用它上面的函数。

这甚至可能吗?

提前致谢

3 个答案:

答案 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