为啥 refed Dll 应该与 .Net 中的 exe 放在同一目录中?

Posted

技术标签:

【中文标题】为啥 refed Dll 应该与 .Net 中的 exe 放在同一目录中?【英文标题】:Why refed Dll should be placed in same directory with the exe in .Net?为什么 refed Dll 应该与 .Net 中的 exe 放在同一目录中? 【发布时间】:2013-08-14 06:30:16 【问题描述】:

假设我在vs2010中有几个项目,一个名为app,它是主项目。当我在另一个类库项目中引用应用程序项目使用的dll时,我确保引用的dll已复制到bin类库项目的文件夹,但有一个运行时错误提醒我,除非我将 dll 放在主项目的 bin 文件夹中,否则无法找到引用的 dll。这是为什么呢?期待您的回答,谢谢!

【问题讨论】:

【参考方案1】:

有一个 .dll 搜索顺序。 参考http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

【讨论】:

【参考方案2】:

我尝试搜索“为什么将引用的 dll 复制到 bin 文件夹中”,但找不到任何特定的帖子或博客,但这不是构建应用程序的正确方法吗? .net 确保来自其他引用项目的所有 dll 都被复制到可执行文件的 bin 文件夹中,这样就没有机器级别的依赖关系。如果您的项目 dll 在本地被引用,这是真的。如果您希望您的项目 dll 被多个项目引用,则要么分发这些 dll,要么您需要将这些 dll 放在分发这些 dll 的机器的全局程序集缓存 (GAC) 中。要做到这一点,链接是here。

您也不需要将每个引用的 dll 复制并粘贴到 bin 文件夹中。 .net 会自动执行此操作。如果不是您的情况,则右键单击“参考”区域中的子项目,转到属性,然后将“复制本地”设置为 True。这会将 dll 复制到您的输出/bin 文件夹中以进行分发,并且应该解决依赖关系在没有 DLL 的机器上。

我希望这会有所帮助。

问候,

萨马尔

【讨论】:

以上是关于为啥 refed Dll 应该与 .Net 中的 exe 放在同一目录中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该将 NuGet 包 dll 添加到源代码管理?

C++/CLI 为啥对托管不可见

为啥我的 .net 项目针对 .net framework 3.5 的 System.dll 版本是 2.x?

如果 .Net Core 可以在 Windows 上运行,为啥不能在 .Net Framework 中引用 .Net Core DLL?

为啥我的 IIS7 应用程序池在从 ASP.NET 页面调用的 DLL 中出现异常后关闭?

为 ASP Classic 中的 COM 可见性注册 .NET DLL