如何执行具有依赖项的WiX自定义操作DLL文件

Ada*_*gen 20 c# custom-action wix

我想创建一个依赖于第三方.NET DLL 的CustomAction C#DLL文件(在这种特定情况下,它是MySql.Data.dll).我有C#自定义动作DLL文件与下面的WiX片段一起使用.我只想弄清楚如何安全地向自定义操作添加依赖项.注意:我实际上并不需要此第三方DLL文件文件来运行已安装的应用程序.

  <Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" />

  <CustomAction Id="FixupConfigForMysql" Return="check" />

  <InstallExecuteSequence>
     <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom>
  </InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

我是否需要安装第三方DLL文件(MySql.Data.dll)才能运行自定义操作?

我可以使用第三方DLL文件添加另一个二进制标记吗?

Rob*_*ing 24

WiX工具集中的DTF有一种机制,可以将自定义操作程序集及其所有引用包含在单个二进制文件中(基本上是自解压dll).我不编写托管自定义操作(C/C++创建具有较少依赖性的自定义操作并提高成功率)但它应该在VS中构建时才起作用.

  • 这似乎只是起作用,可能是因为自定义操作构建过程处理添加这些依赖项.如果我理解正确,它们将成为自定义操作构建生成的.CA.dll的一部分.http://blogs.msdn.com/jasongin/archive/2008/05/23/custom-action-project-templates.aspx (9认同)
  • @AdamTegen感谢您发布那篇文章,让我又一周把头撞在了墙上!重要的一点是"自定义操作构建过程将自动打包CA所依赖的任何非GAC程序集"我在开发框中将所有依赖程序集放在GAC中,并且无法弄清楚它们为什么没有'似乎出现在测试盒上.谢谢! (5认同)
  • 作为对其他人的注释,请确保您的`Binary`元素指向WiX生成的`.CA.dll`文件,而不是原始的.NET DLL (2认同)

Pet*_*old 5

您可以用来<Binary />添加运行自定义操作所需的任何文件。这也适用于您需要的任何第 3 方 dll。使用二进制元素包含的文件仅在安装过程中使用,不会被视为正在安装的应用程序的一部分。

更新: CustomAction 和 Binary 之间的连接是通过使用 BinaryKey 属性从自定义操作引用二进制文件来完成的。

除非您可以拥有多个 BinaryKey 属性(我没有尝试过这一点,并且在MSI 自定义操作表中没有直接看到对此的任何支持),否则您只能拥有依赖于一个二进制文件的自定义操作。因此,该二进制文件需要在其内部携带所有必要的依赖项。

也就是说,如果您的 dll 都是 .Net 程序集,则一种想法是使用ILMerge将它们打包到一个程序集中。


小智 5

在 Visual Studio 中将硬引用的“Copy Local”属性设置为 True。