0

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

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

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

那可能吗?如何?

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

谢谢

4

2 回答 2

0

最好在 GAC 中注册该 DLL,将使用来自同一路径的一个 DLL,请参阅以下内容以了解 https://www.c-sharpcorner.com/UploadFile/dacca2/register-your-assembly-in-gac-using- gacutil-exe/

于 2020-04-21T08:20:39.383 回答
0

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

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

首先,首先阅读这篇文章是一件好事: 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 作为参考添加时,它会自动复制到您的输出文件夹中。但是,我们希望 dll 位于子文件夹中。我知道有两种方法可以做到这一点;

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

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

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

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

于 2020-04-21T08:29:33.367 回答