gpt4 book ai didi

c# - WIX 3.0 从 .NET 项目生成功能

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:30 24 4
gpt4 key购买 nike

我有一个大型 .NET 源代码树(185 个 C# 和 VB 项目,其中 60 个是应用程序或网站),我想为其创建一个 wix 设置。一般的想法是有 1 个安装程序 msi 并使每个可执行文件成为一个功能,并将每个应用程序安装在一个单独的目录中。喜欢

%progfiles%/company/app1
/app2
/app3

到目前为止,我已经成功创建了一个带有功能树的 wix 产品文件,并让 heat 工具为每个 .NET 项目生成了片段文件。它们看起来像这样:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="Client.Binaries">
...component definitions...
</DirectoryRef>
<DirectoryRef Id="Client.Content">
...etc...
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="Client.Binaries">
...ComponentRefs referencing components defined under
the DirectoryRef with the same id...
</ComponentGroup>
...etc...

但是两者的联系给我带来了麻烦,功能可以引用 ComponentGroups,ComponentGroups 引用组件,组件包含在 DirectoryRef 中。

定义要由 DirectoryRef 元素引用的目录元素给我带来了麻烦。

一些库被多个应用程序使用,因此 DirectoryRef 必须指向多个目录, 并且多个 DirectoryRef(具有不同的 id)必须指向同一个目录 (found directory alias trick),这两者似乎都是不可能的。

我有一种明显的印象,我正在以错误的方式处理它,或者我错过了一些更深入的洞察力。 (不要惊讶,因为我的 wix-fu 已经整整 3 天了)

有人能告诉我如何在这个黑暗而邪恶的问题上点燃蜡烛吗(没有双关语意...)

最佳答案

如果您只使用一个 MSI,则无法将同一组件安装到不同位置。您可以为同一个文件创建多个组件,但这有点难看,而且维护起来很麻烦。

更好的方法是只安装一次共享文件。对于共享 .NET 程序集,这意味着您应该将它们放在 .NET global assembly cache 中。 (海关总署)。您需要为每个共享程序集做两件事:

  1. give the assembly a strong name bysigning它;在 Visual Studio 您只需启用“签署assembly”复选框并从项目中生成一个新的 key 文件设置。
  2. 在您的 Wix 源文件中,将 Assembly=".net" 属性添加到 File element

程序集在 GAC 中注册后,您的任何应用程序都可以加载它。

关于c# - WIX 3.0 从 .NET 项目生成功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com