gpt4 book ai didi

c++ - 我可以修改并排程序集搜索顺序吗?

转载 作者:可可西里 更新时间:2023-11-01 10:08:01 27 4
gpt4 key购买 nike

我有一个 Windows、C++ 软件项目(使用 Visual Studio 2005 SP1 构建)具有以下(简化的)文件布局:

{App. Root Directory}
|-- bin
| |-- Microsoft.VC80.CRT
| +-- Microsoft.VC80.MFC
+-- utils

binutils 目录中都有各种可执行文件。这些可执行文件中的每一个都依赖于我们存储在 bin 中的并排程序集(C++ 运行时 DLL),但出于各种原因(例如,exe utils 文件夹中是我们主要应用程序的补充工具,并且不经常运行)。作为此文件组织的直接结果,utils 文件夹中的应用程序无法在尚未安装适当的并行程序集的系统上运行(它们失败并显示通常的 “系统无法执行指定的程序” 错误消息)。

我的问题:有没有办法告诉 utils 文件夹中的应用程序明确地查看 ..\bin 文件夹用于适当的并排组装? Assembly Searching Sequence微软的文章没有提到这是否可能。有没有一种聪明的方法可以解决这些应用程序的运行时要求?

我看到的潜在选项:

  1. 将并排程序集的拷贝放入 utils 文件夹中。这可以在运行时完成(以防止我们的应用程序安装包膨胀),但看起来有点脏。
  2. 静态链接运行时 DLL。 我不想这样做!
  3. 让最终用户安装通常的可再发行软件包。 我也不想这样做。

最佳答案

我的第一 react 是,将实用程序从 .\bin 文件夹中分离出来有什么实际好处?我自己有强制症倾向,我理解整洁的感觉,但一旦明显地看到它对您部署应用程序的能力产生负面影响,继续这种做法似乎有点毫无意义。

也就是说,这实际上在技术上是可行的。为此,您可以使用 probing privatePath app.config 文件中的元素。应用程序配置文件的工作方式类似于应用程序 list ,除了它们不能作为资源嵌入:在与 exe 相同的文件夹中创建一个文件,使用 exe 的全名(包括 exe 扩展名)并附加 .config.

<!-- acme.exe.config -->
<configuration>
<windows>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;..\bin" />
</assemblyBinding>
</windows>
</configuration>

有许多注意事项使此解决方案可能无法使用 - 任何指定其自己的依赖程序集的 dll 都需要具有包含 probing privatePath 元素的应用程序配置文件。此外,仅在 Windows NT 6.0 (Vista) 中添加了对 probing 节点的支持,因此如果您仍需要以 XP 为目标,则此解决方案不合适。

关于c++ - 我可以修改并排程序集搜索顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com