2017-02-20 29 views
1

我正在处理组装程序,并通过程序集执行外部程序。 System.Environment.CurrentDirectory程序集和Application.ExecutablePath路径因外部应用程序而不同。 System.Environment.CurrentDirectory是组装路径。 Application.ExecutablePath外部应用程序路径。 虽然反序列化扔expcetion反序列化 - 未找到程序集问题c#

总成没有找到

因为"Application.ExecutablePath "没有我的DLL。 所以我想改变使用System.Environment.CurrentDirectory反序列化的路径。

+1

我认为你应该这样做它http://stackoverflow.com/questions/19398748/adding-references-dynamically-in-net –

+0

虽然deserilzation它抛出异常程序集未找到,因为外部应用程序“revit.exe”文件夹不包含我的dlls.but当我复制我的DLL到该文件夹​​的工作正常。 –

+0

根据这个例子,你可以硬编码路径到你的程序集,他们会加载没有他们在你的exe文件夹在相同的文件夹 –

回答

3

我建议在当前域上设置AssemblyResolve事件。 通过这种方式,您可以明确确定DLL的位置,并在它们未自动找到时加载它们。

杰里米Tammik写到这里吧: http://thebuildingcoder.typepad.com/blog/2014/05/rvtva3c-assembly-resolver.html

要小心的唯一的事情是,你应该确保该事件为您的DLL(没有任何DLL)专找 - 而如果它是不恰当的因为你要加载一个你返回null的DLL(我偶尔会遇到其他人的插件不能很好地实现的场景,并且它会让我的插件搞混了)。