0

我正在尝试在我的 Visual Studio 解决方案中组织我的非托管 .dll 依赖项,但除非 DLL 散布在我的解决方案的顶层,否则它们不会内置到应用程序的目录中,然后应用程序无法运行。我在这个主题上做了很多谷歌搜索,似乎有一个 app.config 设置形式的解决方案:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatepath="lib" />
    </assemblybinding>
  </runtime>
</configuration>

我的解决方案中有一个名为“lib”的文件夹,并且该文件夹中的所有文件的 Copy Local 都设置为 true,但应用程序仍然无法运行。如何在不破坏应用程序的情况下保持 Visual Studio 解决方案井井有条?

4

1 回答 1

0

我发现解决此问题的唯一方法是通过 windows .bat 文件。如果有办法将额外的搜索路径编码为非托管可执行文件,我想知道!

这是我所做的一个例子:

SET PATH=$~dp0plugins\MY_PLUGIN\Debug;%PATH%
vcvars32.bat
devenv build\MY_PROJECT.sln

第一行添加了我希望 Visual Studio 找到我的 dll 的路径。

第二行确保打开“正确”的视觉工作室。IE:如果我的环境设置为 VS2010,我不希望 VS2012 默认打开。

最后一行调用 IDE 打开我的 sln 文件。

现在打开的 Visual Studio 有一个指向我的一个插件的 Debug 文件夹的路径。当我调试我的应用程序时,将找到、加载和调试正确的 dll,没有任何问题 - 我在 Debug->Windows->Modules 面板下验证了这一点。

这仅适用于调试配置。如果我想运行发布配置,我将 .bat 文件更改为“发布”,关闭 Visual Studio 并重新运行 .bat 文件。

我将相同的模式应用于运行我的可执行文件。设置我希望我的 dll 来自的环境,然后执行我的可执行文件:

SET PATH=$~dp0plugins\Debug;%PATH%
... Repeat for other dll locations
"%~dp0Debug\MY_EXECUTABLE.exe" %*

SS64是一个非常宝贵的资源,可以帮助您了解在 .bat 文件中可以做什么

于 2013-11-14T23:32:04.723 回答