我正在为WinForms应用程序创建WiX安装程序。应用程序的名称将在下个月或两个月的某个时间点发生变化,但我不知道新名称会是什么,并且无法控制它。我在应用程序的GUI层中定义了一个包含应用程序当前名称的字符串常量,并更改了使用该产品名称的任何代码来使用此常量。
Public Const PRODUCT_NAME As String = "My Funtimes Desktop Application"
我将AssemblyTitle设置为使用此常量。
<Assembly: AssemblyTitle(PRODUCT_NAME)>
现在,如果可能的话,我想在我的wxs文件中引用AssemblyTitle值,这样当我知道应用程序的最终名称时,我只需要在一个地方更改它。如下所示:
<Product Id="*" Name="!(bind.assemblyTitle.FileIDOfGUIexe)" />
...但我似乎找不到任何明显的地方传递给链接器。
有没有办法可以在WiX文件中访问.NET程序集的AssemblyTitle?
答案 0 :(得分:2)
WiX读取的程序集属性列表位于http://wixtoolset.org/documentation/manual/v3/overview/light.html。 AssemblyTitle不是其中之一,但可以在http://wixtoolset.org/issues/提交功能请求。
答案 1 :(得分:1)
这是非常具体的功能,我怀疑WiX有这个功能。
绑定来自文件,称为*.wxl (wix localization files)
。 Visual Studio通过wix灯自动绑定它们。它为每个本地化文件生成一个msi。 http://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/build_a_localized_version.html
如果您创建预构建事件/预构建ms-task,它将读取assemblyTitle属性,并从中生成* .wxl文件,这可以工作。
另一个选项是在wxs文件上运行动态XSLT,也在prebuild事件中运行。
在生成msi后(在构建后的事件中)还可以选择运行orca.exe,并让orca更改ProductName。
无论哪种方式,我认为你最终编写自己的ms-build任务/某种可读取AssemblyTitle
的可执行文件,它可能涉及预构建/后构建任务。