【问题标题】:Deploy C# DLL library with dependecies使用依赖项部署 C# DLL 库
【发布时间】:2017-04-14 14:01:09
【问题描述】:

我有一个应用程序(我们称之为 A),它从 Plugins 文件夹中加载 DLL 插件。我创建了一个插件 dll(我们称之为 B)。我的插件 dll 是用 C# 编写的,并且有一些依赖项,例如 CEFSHARP DLL。如果我将所有 CefSharp DLL 所需的依赖项复制到应用程序 A 文件夹,应用程序 A 可以加载我的插件 dll B 的唯一方法。我的问题是:

如何制作安装设置文件,以便将必要的依赖项安装到某种文件夹,并且应用程序 A 会知道它们在哪里?在安装过程中插件 B 不必转移到插件文件夹。有可能吗?

提前致谢!

【问题讨论】:

  • 你可以用 WIX 做很多事情

标签: c# visual-studio dll dependencies


【解决方案1】:

如果应用程序实现得很好,它应该带有一个 app.config(这是 Visual Studio 中的名称)或 myapp.exe.config(这是它编译后的名称)文件,用于在插件文件夹中搜索依赖的 DLL,喜欢

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="plugins" />
    </assemblyBinding>
  </runtime>
</configuration>

您的插件将同时拥有所有依赖项,无需将它们放入应用程序的安装目录中。

使用InnoSetup,您可以这样做:

  • 让用户选择应用程序 A 的安装目录(理想情况下:使用 Pascal 脚本自动检测它,例如从注册表中,不要让用户选择它)
  • 将依赖项安装到所选目录中
  • 将插件安装到plugins子目录中

以下是 InnoSetup 脚本的相关行:

[Setup]
DefaultDirName={pf}\App A
[Files]
Source: "./myplugin.dll"; DestDir: "{app}/plugins"; Flags: ignoreversion
Source: "./dependency.dll"; DestDir: "{app}"; Flags: ignoreversion

【讨论】:

  • 我没有编译或构建应用程序 A,它是第 3 方应用程序,它提供了一个带有基类的 DLL 文件,该基类可以在我的插件 B 中扩展。我面临的问题是,如果我将将所有依赖项放入 Plugins 文件夹它不起作用,它显示缺少依赖项错误。
  • 然后联系供应商,告诉他他的插件概念行不通。
  • 我会将此作为主题答案进行检查 :)) 是否有任何其他黑客可以绕过它而不联系供应商?如果没有,我将联系供应商并提交错误。谢谢!
  • 是否可以使用 InnoSetup 完成我需要的操作?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多