我有一个 Windows C++ 软件项目(使用 Visual Studio 2005 SP1 构建),具有以下(简化的)文件布局:
{App. Root Directory}
|-- bin
| |-- Microsoft.VC80.CRT
| +-- Microsoft.VC80.MFC
+-- utils
有各种可执行文件存在于两个bin and utils目录。每个可执行文件都依赖于我们存储在其中的并行程序集(C++ 运行时 DLL)bin,但我们出于各种原因将它们分成这些单独的文件夹(例如,utils文件夹是我们主要应用程序的补充工具,并且不经常运行)。作为此文件组织的直接结果,应用程序utils文件夹无法在尚未安装适当的并行程序集的系统上运行(它们会因通常的情况而失败)“系统无法执行指定的程序”错误信息)。
我的问题:有什么方法可以告诉应用程序中的utils文件夹以显式查找..\bin
适当的并排装配的文件夹?这程序集搜索顺序 http://msdn.microsoft.com/en-us/library/aa374224.aspx微软的文章没有提到这是否可能。有没有一种聪明的方法可以解决这些应用程序的运行时要求?
我看到的潜在选择:
- 将并排装配体的副本放入utils文件夹。这可以在运行时完成(以防止我们的应用程序安装包膨胀),但看起来有点脏。
- 静态链接运行时 DLL。我不想这样做!
- 让最终用户安装常用的可再发行软件包。我也不愿意这样做。
我的第一反应是,将公用事业与公用事业分开会带来什么实际好处?.\bin
文件夹?我自己也有强迫症倾向,我理解整洁的感觉,但一旦可以明显地看到它对您部署应用程序的能力产生负面影响,那么继续这种做法似乎就毫无意义了。
也就是说,这在技术上实际上是可行的。为此,您可以使用探测私有路径 http://msdn.microsoft.com/en-us/library/windows/desktop/aa374182%28v=vs.85%29.aspxapp.config 文件中的元素。
应用程序配置文件的工作方式与应用程序清单类似,只是它们不能作为资源嵌入:在 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
元素。
还支持probing
节点仅在 Windows NT 6.0 (Vista) 中添加,因此如果您仍需要以 XP 为目标,则此解决方案不合适。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)