需要澄清的是:.NET运行时如何解析父文件夹中的程序集引用?

需要澄清的是:.NET运行时如何解析父文件夹中的程序集引用?,.net,assemblies,reference,resolution,.net,Assemblies,Reference,Resolution,我的解决方案中有以下可执行文件的输出结构: %ProgramFiles% | +-[MyAppName] | +-[Client] | | | +-(EXE & several DLL assemblies) | +-[Common] | | | +-[Schema Assemblies]

我的解决方案中有以下可执行文件的输出结构:

%ProgramFiles% | +-[MyAppName] | +-[Client] | | | +-(EXE & several DLL assemblies) | +-[Common] | | | +-[Schema Assemblies] | | | | | +-(several DLL assemblies) | | | +-(several DLL assemblies) | +-[Server] | +-(EXE & several DLL assemblies) %程序文件% | +-[MyAppName] | +-[客户] | | |+-(EXE和多个DLL程序集) | +-[普通] | | |+-[架构程序集] | | | ||+-(几个DLL程序集) | | |+-(几个DLL程序集) | +-[服务器] | +-(EXE和多个DLL程序集) 解决方案中的每个项目都引用不同的DLL程序集,其中一些是解决方案中其他项目的输出,另一些是普通的第三方程序集。例如,[Client]EXE可能引用位于不同目录分支中的[Common]中的程序集

所有引用都将“Copy Local”设置为false,以镜像最终安装的应用程序中的文件布局

现在,如果我看一下VisualStudioIDE中的引用属性,我会发现每个引用的“路径”都是绝对的,并且它对应于程序集的实际输出位置。这是可以理解和正确的。正如预期的那样,该解决方案编译并运行良好

我不明白的是,为什么在我关闭IDE、重命名[MyAppName]目录并手动运行[Client]EXE时,一切似乎都正常工作?如果引用路径与链接时的路径不同,运行时如何查找程序集

要明确的是,这正是我想要的:一组半分散的应用程序文件,无论[MyAppName]目录位于何处,甚至它的名称如何,都可以正常运行。我只是想知道,在没有任何特定路径解析的情况下,它是如何工作的,以及为什么工作的

我已经读过的答案,但我还是不明白


非常感谢您的帮助

下面是.Net如何查找所需的程序集:


步骤4是您可能感兴趣的内容:

以下是.Net如何查找所需的程序集:


步骤4是您可能感兴趣的内容:

您是否考虑使用将共享程序集添加到您是否考虑使用将共享程序集添加到AFAIK唯一的解决方案是至少具有“存根”然后将子目录定义为每个应用程序的app.config中DLL的源


NTFS确实支持“挂载”其他目录(即硬链接)作为子目录,但它们非常不自动,因为除了理论化之外,我没有尝试过这样做,所以我不知道这是否会起到黑客的作用。

AFAIK唯一的解决方案是至少有“存根”然后将子目录定义为每个应用程序的app.config中DLL的源


NTFS确实支持“挂载”其他目录(即硬链接)作为子目录,但它们非常不自动,因为除了理论化之外,我没有尝试过这样做,所以我不知道这是否会起到黑客的作用。

可能公共文件夹在编译时被指定为binpath参数

(请参见探测专用路径)


-Matt

在编译公用文件夹时,是否将其指定为binpath参数

(请参见探测专用路径)


-马特

没有。据我所知,GAC用于共享组件。如“多个应用程序使用的应用程序”。我的程序集不被其他应用程序共享-它们是安装我的应用程序的私有程序(可以是客户端部分、服务器部分,或者在极少数情况下,两者都是)。否。据我所知,GAC用于共享程序集。如“多个应用程序使用的应用程序”。我的程序集不被其他应用共享-它们是安装我的应用程序的专用程序(可以是客户端部分、服务器部分,或者在极少数情况下两者都是)。我以前读过这些链接,但没有找到运行时如何查找不在ApplicationBase分支下的程序集的答案,就像我的示例中的[Common]。我以前读过这些链接,但是,对于运行时如何查找不在ApplicationBase分支下的程序集(如我的示例中的[Common]),还没有找到答案。如何在app.config中定义DLL源?
将使其成为
path\to\dlls
如何在app.config中定义DLL源?
将使其成为
path\to\dlls