假设我有一个窗口表格 / 控制台应用程序 C#与一些项目外部参考以及对同一解决方案中其他类库项目的引用。
当我构建窗口形式项目,我希望引用的库存储在不同的位置 (eg: bin\发布\库), 并且与 .exe 不在同一文件夹中.
可以做吗?
您的问题有两部分:
如何配置解决方案以将程序集/EXE 构建到您选择的文件夹中 - 这是通过 VS 中的项目属性进行配置的(项目属性 -> 构建 -> 输出路径)。还检查每个引用上的“复制本地”属性的值。
如何从非默认位置(即从 ...\Libraries 文件夹)加载程序集文件 - 您需要更改 app.config 文件以将此非默认路径添加到程序集搜索位置。
到 Microsoft 网站的链接不再有效,因此来自 Wayback Machine 的摘要:如何在运行时加载位于应用程序 bin 文件夹之外的文件夹中的程序集 https://web.archive.org/web/20070328230901/http://support.microsoft.com/kb/837908:
方法 1:将程序集安装到全局程序集缓存 (GAC) 中。
GAC 是安装公共语言运行时的计算机范围的代码缓存。 GAC 存储您专门指定由多个应用程序共享的程序集。
注意 您只能在 GAC 中安装强名称程序集。
方法 2:使用带有标签的应用程序配置 (.config) 文件
.config 文件包含以下设置:
• 特定于应用程序的设置
• 公共语言运行时读取的设置,例如程序集绑定策略设置和远程处理对象设置
• 应用程序读取的设置
The <codeBase>
标记指定公共语言运行时可以在哪里找到程序集。公共语言运行时应用以下设置<codeBase>
.config 文件中的标签。的设置<codeBase>
标签确定程序集的版本和位置。
方法 3:使用 AssemblyResolve 事件
每当公共语言运行时尝试绑定到程序集但失败时,AssemblyResolve 事件就会触发。您可以使用 AddHandler 方法将事件处理程序添加到应用程序,每当 AssemblyResolve 事件触发时,该处理程序都会返回正确的程序集。
AssemblyResolve 事件处理程序必须返回 [Assembly] 对象,并且公共语言运行时必须绑定到该对象。通常,您可以使用 Assembly.LoadFrom 方法加载程序集,然后返回对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)