C# 探测路径-如何强制调用保持在目录结构中 更新-原始问题如下

C# 探测路径-如何强制调用保持在目录结构中 更新-原始问题如下,c#,reflection,probing,C#,Reflection,Probing,我已经做了一些额外的测试,现在我相信问题的根源是.NET如何定位程序集 正如我在下面提到的,子目录中有.dll文件,但我在下面提到的.dll文件不是每个目录中唯一的.dll文件。例如,在\translation\Customer目录中有一个Customer.dll文件和两个标准文件(translation.dll、Mapping.dll、Execute.dll)。在\translation\Standard目录中有一个Standard.dll,然后是其他标准文件(translation.dll、

我已经做了一些额外的测试,现在我相信问题的根源是.NET如何定位程序集

正如我在下面提到的,子目录中有.dll文件,但我在下面提到的.dll文件不是每个目录中唯一的.dll文件。例如,在\translation\Customer目录中有一个Customer.dll文件和两个标准文件(translation.dll、Mapping.dll、Execute.dll)。在\translation\Standard目录中有一个Standard.dll,然后是其他标准文件(translation.dll、Mapping.dll、Execute.dll)。这些文件都是生成的代码(来自不同的项目),这就是为什么每个目录都有标准文件的副本以及与子目录直接相关的文件

在我的Windows服务应用程序中执行Customer.dll文件中的方法时,标准程序集中的其他方法(Translation.dll、Mapping.dll等)也将被调用。我相信对其他.dll文件的调用没有在同一目录中的.dll上执行

例如,我调用了/translation/Customer/Customer.dll上的一个方法,然后调用了translation.dll上的一个方法。然而,应用程序并没有调用/translation/Customer/translation.dll上的方法,而是首先查找/translation/Standard/translation.dll并调用该文件上的方法

是否可以强制.NET调用同一目录中的这些关联.dll文件?或者我必须做些什么才能使“标准”程序集在每个目录中唯一命名?


原始问题: 我有一个C#Windows服务应用程序,它监视目录并处理传入的文件。处理的每个文件都有一组针对该文件运行的可配置任务。每个任务的代码都包含在一个外部.dll中,该外部.dll在运行时使用反射动态加载。external.dll存在于主应用程序文件夹的多个子目录中,可以通过app.config文件中应用程序的
元素中的条目来访问它们

我最近扩展了子目录的数量,以更好地组织外部.dll,并且我遇到了一些与
元素有关的意外功能。我正在运行一个测试来处理一个需要对该文件执行两个任务的文件。第一个任务存在于文件Customer.dll中,位于名为“\translation\Customer”的子文件夹中。第二个任务存在于文件Standard.dll中,位于名为“\translation\Standard”的子文件夹中

如果我的探测元素看起来像这样,那么第二个任务(在“标准”文件夹中的.dll上运行方法)将无法执行

但是,如果我切换这些条目,使探测元素看起来像这样,则两个任务都会成功执行


有人能帮我理解为什么探测元素中子目录的顺序会对这些子目录中包含的.dll的执行产生影响吗?

进一步的调查表明,这不是反射或程序集加载问题。我遇到的问题是由于我正在思考的程序集中的构建问题造成的。错误是模糊的,它使问题看起来不像是什么。感谢SWeko没有注意到内部异常。那个评论帮了大忙

“执行失败”是什么意思?程序集无法加载,加载了错误的程序集,还有其他吗?@Ralf-当任务尝试执行时,我得到一个System.Reflection.TargetInvocationException,请查看其内部异常。targetInvestmentException基本上是反射api,表示“出了问题”。可能是一些无辜的东西,比如拼写错误。@SWeko-我将查看内部异常。然而,我不确定这会有什么不同,因为这是探测路径顺序的变化,而探测路径似乎决定了任务是否成功。@SWeko-请查看我更新的问题。根据最近的一些测试,我认为我的问题是由于没有正确引用同名的.dll文件