我们有大约100多个Visual Studio C#/ .net解决方案,其中包含用于部署的Visual Studio安装程序项目(vdproj)。这些是在Visual Studio 2010中构建的。
为了升级到Visual Studio 2012,我们需要将这些.vdproj项目迁移到Wix,因为vs2012不再支持这些项目类型了。
这些项目大多是简单的项目,它将文件安装到给定的位置。我们在安装过程中使用自定义操作,使.config文件位置特定(用实际值替换标记)。
将这些项目转换为Wix的最佳方式(每个项目的工作量最小)是什么?
答案 0 :(得分:1)
我会在这里发表我的反应。因为更好的格式化和一些我想解释的事情。
在您的评论回复中。答案还包含一个使用PowerShell制作的脚本。你可以做的是创建另一个powershell,它将遍历你的项目,然后执行脚本。但是你只有wxs文件,你仍然需要创建100多个wix项目并将文件添加到该项目中。
您还可以使用heat.exe在要安装的项目中创建后期构建事件。例如(可能需要对项目进行一些调整/更改)
call "C:\Program Files (x86)\WiX Toolset v3.6\bin\heat.exe" project
"$(ProjectDir)$(ProjectFileName)" -directoryid INSTALLDIR -pog Content
-gg -scom -sreg -sfrag -out "$(SolutionDir)Installed\$(ProjectName).Content.wxs"
然后你可以将输出文件链接到WiX项目,这样当你添加文件或dll时,它会再次自动生成,你的文件将保持同步。您现在需要的是创建一些可以在所有wix项目中使用的product.wxs模板。
我认为这里的解决方案是使用PowerShell和heat.exe的组合。您可以使用以上命令为项目生成wxs文件。但是你仍然需要手工添加wix-projects。
答案 1 :(得分:0)
你是否严格依赖Wix?
也许您可以切换到免费(开源)系统的NSIS或Inno Setup。
有一个Visual Studio扩展用于使用NSIS / Inno安装程序,它可以处理VS安装项目(.vdproj)并转换它们 - http://visualstudiogallery.msdn.microsoft.com/5e57fe9a-ae5d-4740-a1c3-7a8e278e105b。
答案 2 :(得分:0)
我建议看看Wix#。 http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX
对于需要创建Windows Installer MSI以部署其应用程序的C#开发人员,Wix#可能是"打包和部署" Microsoft从VS2012开始从Visual Studio中删除的项目类型。 Wix是WiX工具集的C#前端,允许使用C#语言构建完整的Windows Installer MSI。
您特别提到所有安装程序都是简单项目,它们将文件安装到给定位置,在安装过程中使用自定义操作,以使.config文件位置特定(用实际值替换标记)。
Wix#非常适合此类要求,假设您的项目确实与您指出的高度相似。您将在C#中为一个典型程序开发一个好的Wix#示例,然后为要替换的每个附加.vdproj安装程序克隆100次(或多次)。更好的是,如果你有一个擅长T4模板的团队成员,你可以使用它自动完成将你的第一个C#Wix#原型安装程序转换为模板的过程,然后使用该模板自动生成剩余的99 .cs Wix#代码文件用于其余项目。
以下是您请求的Wix#安装程序类型的C#代码示例。这假设您编写了一个名为" TailorMyConfig.exe"的实用程序,例如,使用ConfigurationManager.AppSettings例程的简单C#程序,并且您正在将此exe与您的应用程序一起部署。
using System;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
using WixSharp;
class Script
{
static public void Main(string[] args)
{
var project = new Project("MyProduct",
new Dir(@"%ProgramFiles%\My Company\My Product",
new File(@"Files\Bin\MyApp.exe"),
new File(@"Files\Bin\TailorMyConfig.exe")),
new ManagedAction("UpdateConfigFile"));
project.Id = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");
Compiler.BuildMsi(project);
}
}
public class MyCustomAction
{
[CustomAction]
public static ActionResult UpdateConfigFile(Session session)
{
if (DialogResult.Yes == MessageBox.Show("Config file update ready to run.\n Update config file(s) now?",
"Config Tailoring Utility",
MessageBoxButtons.YesNo))
{
Process.Start("TailorMyConfig.exe", "Run utility to tailor config file to current system");
}
return ActionResult.Success;
}
}
请注意,有更好的"使用WiX功能修改配置文件的方法。为简单起见,上面的示例假定了一个用于修改配置文件的自定义编写的C#exe实用程序。我建议使用WiX XML功能来代替这一点。您可以使用" XML注入"的Wix#技术将几乎任何WiX XML功能直接合并到您的Wix#setup中。
请记住,Wix#只是一个发布WiX XML语法的C#前端。在Wix#发出WiX XML(wxs文件)之后,可以轻松地对该wxs文件进行后处理以插入其他WiX XML功能。然后,生成的wxs文件由WiX工具集编译为MSI。
有关使用XML Injection将WiX XML功能合并到Wix#(C#)安装的示例,请查看此处In Wix#, how to avoid creating a physical folder on the target system, when deploying only registry entries? 在那个问题中,请参阅我的答案,该答案使用了将代理连接到" WixSourceGenerated"事件
然后,您可以使用此XML注入方法将一些WiX XML插入到您的安装程序中,以完成配置文件编辑。一些典型的WiX XML修改配置文件的示例如下: How to modify .NET config files during installation?
我意识到这是一个有点老问题,但它出现在我的搜索中,所以我想让其他搜索者知道这个额外的Wix#选项。 Wix#方法在我的环境中非常有用,它允许使用熟悉的C#技能组,而不必首先涉及到WiX XML安装程序技术的全部复杂性。
答案 3 :(得分:0)
首先,您应该获取WiX书籍(约500页),并仔细阅读。其次,你应该尝试一下自己。第三,您应该手动将它们转换为WiX。
不要使用转换器,它们是无用的,因为它们会产生垃圾,特别是如果你已经非常容易安装。