好的,我前几天问了这个问题,由于我的含糊,它被关闭了。我会尝试更具体。在一个项目中,比如 C#(使用 Visual Studio),我添加了对 dll 的引用(右键单击 References->Add Reference),并且所述 dll 的位置在 C:\Blah\Foo 中。现在,如果我将构建的 exe 移动到另一台机器上,dll 的位置是否需要与 exe 一起使用,还是需要在 C:\Blah\Foo 中?谢谢你。
5 回答
当您以您描述的方式添加引用时,它将被复制到输出文件夹(与 exe 文件相同)。查看引用的属性 (F4),您将看到一个名为“Copy Local”的选项,如果将其设置为 true,则 DLL 将被复制到与 EXE 文件相同的输出文件夹中。
因此,当您将应用程序部署到另一台计算机时,您需要将 exe 及其引用的所有 DLL 复制到部署位置。Windows 将在多个位置搜索 DLL,其中第一个位置与 EXE 文件位于同一文件夹中。
通常,您只需将程序集放在与应用程序相同的文件夹中,这会导致它位于默认探测路径中,并被找到(对于大多数应用程序),但根据应用程序的类型,还有许多其他选项。当您定义参考时,可以选择“复制本地” - 这会导致程序集被复制到应用程序的输出文件夹。如果将此设置保留为True
,则程序集 (DLL) 将与 .exe 一起使用,并且通常“正常工作”。
运行时使用的完整过程在 MSDN如何运行时定位程序集中进行了介绍。特别是,标题为“通过代码库定位程序集”或“探测”的主题涵盖了如何详细定位程序集,这取决于很多因素。
DLL 应该带有 exe 文件。查看此链接以查看 DLL 的 .NET 搜索位置 搜索位置以加载引用的 DLL 的顺序是什么?
dll 可以安装在 GAC 中,也可以与 EXE 位于同一目录中。
编辑:上面提到的只是解决引用的几个位置。
添加引用时,您在此程序集上的 csproj 上添加路径,您不必确保您可以引用此 dll。
当您部署时,这是另一个问题,因为您的 dll 被复制到您的Bin
目录中。
如果部署,请检查 csproj 中的程序集路径,并确保部署程序集
注意:检查CopyLocal
您的参考属性
2 其他解决方案:
您可以使用GAC Global Assembly Cache
以共享您的程序集
工具:Gacutil.exe
为了设置组件