【问题标题】:Installation of dll's into GAC将dll安装到GAC中
【发布时间】:2015-05-09 15:37:30
【问题描述】:

我希望能顺利高效地安装解决方案,但我“继承”的远非如此,编写大部分程序的人已经离开了公司。

目前我正在尝试将它安装在测试服务器上,而不是在安装后将所有 dll 的土地都放在正确的位置。

首先,如果我在项目中使用log4net,那么我需要安装后文件夹中的log4net.dll(我猜)。如何让 log4net.dll 与项目 dll 一起复制?

其次,项目 A 期望项目 C 的 dll 位于 GAC 中,或者当我在 Visual Studio 中调试并检查模块的加载位置时,似乎是这样。 我还看到这是在项目 A 的构建后事件命令行中输入的:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\GacUtil.exe" -i "$(TargetPath)" 复制 "$(TargetPath)" "C:\Program Files\MySolution\bin"

那么如何通过安装的方式将 Project C 的 dll 导入 GAC?我在测试服务器上收到错误,因为它无法加载 C.dll。

更新更多细节

使用 Windows Installer 安装解决方案后,会在父文件夹中创建一些文件夹,例如 Apps、bin、Engines、Service 等。

在 Apps 文件夹中,我有 A.exe,它正在寻找 C.dll。但是,C.dll 出现在 bin 文件夹中。如上所述,在执行 A.exe 期间,它实际上从 GAC 加载了 C.dll 的模块(在我的笔记本电脑上,这些文件 在 GAC 中,因为构建后事件命令在项目 C 的属性中指定的行,但不在我尝试安装此解决方案的测试服务器的 GAC 中)。

所以是的,我想我可以运行这样的东西:

gacutil -i C.dll

安装后,但是好像不对。

【问题讨论】:

  • 您使用的是什么安装技术?您不需要将 C 库添加到 GAC,GAC 仅适用于 .Net 程序集。为什么不能从复制所有内容的文件夹中执行?
  • 他似乎指的是“项目 C”,而不是用 C 编写的项目。
  • 对不起@mageos 的混淆,我不是在使用 C 库,而是在编写 C# 代码。我只是将其中一个项目称为“项目 C”作为示例。
  • @mageos,我正在使用 Windows 安装程序。

标签: c# dll


【解决方案1】:

关于 GAC 和确保复制 DLL 的问题分为两部分。

GAC

查看 MSDN 中的此链接 (https://msdn.microsoft.com/en-us/library/dkkx7f79%28v=vs.110%29.aspx),了解如何安装到 GAC。关键是它必须是强命名的,否则会失败。

DDL

根据您引用 Log4Net 的方式,有几种方法可以做到这一点。

  • 如果您可以在项目中添加引用,请确保属性 CopyLocal 设置为 true
  • 如果您只有本地文件,您可以使用符号链接 (https://support.microsoft.com/en-us/kb/306234) 将其添加到项目的子文件夹中,然后设置 CopyToOutputDirectory 属性。

希望这些对您有所帮助。

【讨论】:

  • 我其实看过 MSDN 链接,但不喜欢安装后必须做的事情。注释说 Gacutil.exe 仅用于开发目的,不应用于将生产程序集安装到全局程序集缓存中。 我还在解决方案的许多项目中使用符号链接方法链接到我用于配置的外部 log4net 文件,因此我只需要该文件的一份副本。不过链接很好。
  • 该链接还显示了如何使用 Windows Installer 进行安装以将您的部署部署给客户。这是使用“InstallShield Limited Edition Project”完成的,它是一个免费(需要注册)附加组件。非常简单直接的 UI。
【解决方案2】:

我找到了我要找的东西! 选择安装项目,然后进入菜单“查看”-> 编辑器-> 文件系统。 看来您可以指定 dll 必须放在哪里,以及在安装过程中应该将哪些内容复制到 GAC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多