Ais*_*war 28 c# dll dependencies visual-studio
我正在使用EmguCV进行项目,当我们的程序运行时,它需要一些像"cxcore.dll"等dll(或者它会抛出运行时异常).目前,我将文件放在输出文件夹的根目录中(在Visual Studio的文件属性中选择"始终复制").
然而它看起来有点凌乱,只有10个不同的dll.有没有我可以将它移动到输出文件夹中的子文件夹,它仍然会找到它.
小智 64
到目前为止惊人的答案 没有权利;)嗯,
是的,您可以将程序集放在不同的位置.
在相应的应用程序配置(app.config将被复制到your.exe.config)中添加:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib" />
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
根据:
http://msdn.microsoft.com/en-us/library/823z9h8w.aspx
这将使程序查看程序集的私有路径(它自己的文件夹下的文件夹) - 就像Web应用程序查找/ bin一样.
您也可以将它们放入GAC,但除非有其他原因,否则应该避免这种情况.
话虽这么说,你真的不需要.如果您在开始菜单中正确安装应用程序,用户不会感到困惑;)我从来没有遇到过这个问题,包括50多个程序集的项目.用户似乎永远不会看到它们.
Svi*_*ish 21
要将程序集放在子目录中,您可以手动将它们复制到那里,使用预构建或后构建事件或完全不同的事件.
要加载它们,您可以使用AppDomain.AssemblyResolve事件,或(如TomTom所述)<probing>元素.来自MSDN:
以下示例说明如何指定运行时应搜索程序集的应用程序基础子目录.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
GAC当然是另一个转储程序集的地方,但这并不算作子目录......除非你在某个地方安装你的应用程序它真的不应该安装:P
sag*_*gie -2
您可以使用构建前/构建后事件以及告诉您输出文件夹位置的宏将 dll 复制到您想要的位置。
但是,如果 dll 与可执行文件不在同一目录中,则不会加载它们。如果它们是托管的,您可以使用 Assembly.Load 方法手动加载它们。如果它们不受管理,我不知道你该怎么做。
| 归档时间: |
|
| 查看次数: |
49921 次 |
| 最近记录: |