繁体   English   中英

DLL lib 在 EXE 的不同文件夹中(相对路径)

[英]DLL lib in a different folder of EXE (relative path)

我有一个 windows 应用程序项目,它构建在一个使用 DLL (RestSharp) 的 exe 中。 该项目在 Visual Studio 2008 中。我在参考文献中添加了 DLL,如果我点击 DLL,我会看到:

  • 别名:全球
  • 复制本地:
  • 具体版本:
  • 路径: C:\Dev\MyProject\Lib\Restsharp.dll

当我构建我的 exe 时,使用这些设置,DLL 库被复制到构建目录中。 在我的部署环境中,我想将我的 exe 放在一个文件夹中,并将 DLL 放在另一个文件夹中 示例:C:\Test\Exe (EXE FOLDER) Z0D61F8370\Test\Lib (D412F80B84D143FDLL)

那可能吗? 如何?

我在参考路径中设置了 C:\Test\Lib ,但这是一个绝对路径,我正在寻找一个相对路径。 参考文献中的 DLL 路径也是绝对的。 我究竟做错了什么? 我希望 exe 能够“找到” DLL,无论它被复制到哪里(C:\Test 或 D:\Test 或只是 D:)

谢谢

Better you register that DLL in GAC, one DLL from same path will be using, Please refer below to know https://www.c-sharpcorner.com/UploadFile/dacca2/register-your-assembly-in-gac-using- gacutil-exe/

在开始之前,深呼吸并确定你想要这个的确切原因,因为这通常会使事情复杂化而没有太多收获。

您可以通过使用装配探测来做到这一点。

首先,首先阅读这篇文章是一件好事: https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

文章的某处是这样的:

元素的 privatePath 属性,即用户定义的根位置下的子目录列表。 可以使用应用程序域的 AppDomainSetup.PrivateBinPath 属性在应用程序配置文件和托管代码中指定此位置。

我们可以在探测标签的文档中看到它是如何完成的; https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/probing-element

将 app.config 文件添加到您的项目并像这样编辑它:


<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
         <probing privatePath="bin\REEE;someTestPath"/>  
      </assemblyBinding>  
   </runtime>  
</configuration>  

现在,当 dll 作为参考添加时,它会自动复制到您的 output 文件夹中。 然而,我们希望 dll 位于子文件夹中。 我知道有两种方法可以做到这一点;

  1. 将 dll 从 output 目录复制到您的子路径。 您可以使用构建后任务,例如 xcopy 来执行此操作(围绕此的 google 应该不难)。 您还可以使用 msbuild 任务复制 dll
  2. 将 dll 作为内容添加到 csproj 中同名的子文件夹,设置为复制本地。 见下图。 在此处输入图像描述

还要检查这个相关的答案:

https://stackoverflow.com/a/58124935/4122889

我强烈建议您不要这样做,除非您有充分的理由这样做。 那时我很好奇这个原因是什么:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM