2011-11-23 102 views
0

程序ClosedSourceProgram启动并将我的文件复制到未知位置。它们的结构将是:如何从动态位置将C#dll加载到C#dll项目中?

?\project.dll 
?\project\usefultools.dll 

我到usefultools.dll加载到我的项目,但我不知道我怎样才能知道C#VS2010该dll位置将是

project\usefultools.dll 

我将库添加到我的程序集中作为参考,以便在开发过程中知道它的内容 - 因此它尝试加载的时间比我能通过Assembly.LoadFrom()加载的时间早。

我手动将文件复制到ClosedSourceProgram-root目录。它现在加载没有Assembly.LoadFrom()

当前工作树:

?\ClosedSourceProgram\ClosedSourceProgram.exe 
?\ClosedSourceProgram\usefultools.dll 
?\ClosedSourceProgram\temp\project.dll 

我想树:

?\ClosedSourceProgram\ClosedSourceProgram.exe 
?\ClosedSourceProgram\temp\project.dll 
?\ClosedSourceProgram\temp\project\usefultools.dll 

我想告诉我的项目,它应该搜索子目录,如果它不能找到根目录下的DLL - 我怎样才能做到这一点?

回答

2

你总是可以尝试Assembly.LoadFrom()

+0

我编辑了这个问题。 Assembly.LoadFrom()不是我想要的,但可以工作。 – Johannes

3

您可以从任意位置在运行时使用Assembly.LoadFrom,并通过文件名加载程序集。


编辑:

另一种选择是订阅AppDomain.AssemblyResolve事件,并根据需要加载的程序集。这具有允许任何结构的优点,因为所有未发现的组件都可以根据需要加载。

+0

我编辑了这个问题。 Assembly.LoadFrom()不是我想要的,但可以工作。 – Johannes

+0

@Johannes给你另一种选择... –

+0

谢谢 - 但这仍然不是我所期待的。我实际上不想在运行期间加载它,因为我想在开发过程中将其放在我的程序集中,而不需要额外的努力。现在情况就是这样 - 我想改变的就是库搜索的默认位置。所以我基本上在寻找某种项目属性。 – Johannes

0

如果程序集在应用程序路径的任何子文件夹 中,则可以使用“〜”运算符。 Assembly.LoadFrom(“〜\ project \ usefultools.dll”);其中,

+0

我可以使用〜操作符以某种方式与我的普通引用,以便在子目录中搜索dll? – Johannes