2012-06-04 42 views
3

假设我想编写一个小程序,我们可以给它一个.CS文件,它可以为我们编译并说出是否有编译错误。所以我为此使用了CodeDom。 当我想要使用CodeDOM时,我必须添加这些DLL名称,以便我可以在运行时加载它们。 是这样的:我们是否真的需要硬编码的DLL

CompilerParameters parameters = new CompilerParameters(); 
    parameters.ReferencedAssemblies.Add("System.dll"); 
    parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 

但也存在一些问题,这种做法: 我如何确保我已经imcluded所有必要的DLL? 是唯一的方法吗?有没有更好的方法,而不是像这样添加这些DLL?

谢谢。

回答

4

你不需要硬编码任何东西。想象一下,在循环中调用Add(),使用从文本文件中读取的DLL名称(或在运行时在目录中找到)。你有所有的工具你需要写一些非常灵活的东西。

+0

使用从文件中读取的DLL名称?你能解释一下吗?谢谢。 – Bohn

+0

.CS文件的作者可能还会在第二个文件中提供一个DLL列表,每行一个。您的程序可以读取该文件,并在读取每行后,将读取的字符串传递给“Add()”的调用。 –

+0

哦,我看到了...仍然像是输入它们......是的,它并不是很难在源代码中编码......但仍然难以在文本文件中的其他地方编码......想知道我们是否可以分析源代码通过一些Reflection Magic的代码,找出需要什么DLLS并在运行时添加这些代码? – Bohn

3

如果通过硬编码,你的意思是明确指定要包含的dll(无论它们来自文本文件还是源文件),那么NO就没有任何方法让CodeDom找出这个源自使用的类给定的名字可以存在于'任何'程序集中。所以你作为开发者必须指定你指的是哪个程序集。

在你的情况下,如果你将源代码作为输入,你也可以让inputer指定引用的库。你无法可靠地猜出它们。

+0

“你也可以要求输入器指定引用的库。”你能否解释一下这个部分。谢谢。 – Bohn

+0

@BDotA如果程序的用户指定源文件,他也可以在某些文本框中键入他在源代码中使用的程序集。 –

+0

啊我看到了...不幸的是,这不是我的选择..想知道如果我们可以通过一些反射魔法来分析源代码并找出需要什么DLLS并在运行时添加这些? – Bohn

相关问题