使用WiX从另一个项目引用版本字符串

Ben*_*est 1 .net c# wix

现在,在我们的一个WiX安装程序中,我们明确定义了产品版本字符串,如下所示:

<?define ProductVersion="1.2.3"?>
Run Code Online (Sandbox Code Playgroud)

我们也在另一个表单的标题中使用相同的版本号,下面是一个非常简单的示例,说明如何应用它:

public partial class frmMain : Form
{
    // assume the designer code is all properly generated

    private const string VERSION = "1.2.3";

    public frmMain()
    {
        InitializeComponent();
        this.Text += string.Format(" v{0}", VERSION);
    }
}
Run Code Online (Sandbox Code Playgroud)

这看起来很笨重,我认为没有必要在两个地方更新我们的产品版本.哪里是存储版本字符串信息的最佳位置,所以我只需要在一个地方更新它,只需从表单和安装程序中引用这些数据?

请注意,在这种情况下,产品版本与装配版本不匹配.

Rob*_*ing 5

C#没有像C/C++和WiX工具集那样的预处理器,所以你不能做明显的事情并通过那条路径传递版本.如果产品版本与程序集文件版本匹配,那么您可以执行以下操作:

<Product Version='!(bind.fileVersion.FileIdOfAssembly)'>
Run Code Online (Sandbox Code Playgroud)

如果文件版本可以匹配,这将是理想的.如果没有,那么剩下的唯一选择是在安装时写一些东西并在运行时读取它.例如:

<RegistryValue Root='HKLM'
               Path='SOFTWARE\!(bind.property.Manufacturer)\!(bind.property.ProductName)'
               Name='Version' Value='!(bind.property.ProductVersion)' Type='string' />
Run Code Online (Sandbox Code Playgroud)

然后在你的frmMain()中读取该注册表项.不确定它是否值得应用程序的额外复杂性,因为您现在拥有简单,强大的解决方案.