Visual studio 2010 如何转换100+;Visual Studio安装程序项目(vdproj)到Wix安装程序?

Visual studio 2010 如何转换100+;Visual Studio安装程序项目(vdproj)到Wix安装程序?,visual-studio-2010,wix,visual-studio-2012,migrate,vdproj,Visual Studio 2010,Wix,Visual Studio 2012,Migrate,Vdproj,我们有大约100多个Visual Studio C#/.net解决方案,其中包含用于部署的Visual Studio安装程序项目(vdproj)。这些是在VisualStudio2010中构建的 为了升级到Visual Studio 2012,我们需要将这些.vdproj项目迁移到Wix,因为vs2012不再支持这些项目类型 这些项目大多是简单的项目,将文件安装到给定的位置。我们在安装过程中使用自定义操作,使.config文件特定于位置(用实际值替换标记) 将这些项目转换为Wix的最佳方式是什么

我们有大约100多个Visual Studio C#/.net解决方案,其中包含用于部署的Visual Studio安装程序项目(vdproj)。这些是在VisualStudio2010中构建的

为了升级到Visual Studio 2012,我们需要将这些.vdproj项目迁移到Wix,因为vs2012不再支持这些项目类型

这些项目大多是简单的项目,将文件安装到给定的位置。我们在安装过程中使用自定义操作,使.config文件特定于位置(用实际值替换标记)


将这些项目转换为Wix的最佳方式是什么(每个项目花费最少的精力)?

我将在这里发布我的反应。因为更好的格式和一些我想解释的事情

在你对你的评论的回应中。答案还包含某人使用powershell制作的脚本。您可以做的是创建另一个powershell,它将在您的项目中循环,然后执行脚本。但是您将只拥有wxs文件,您仍然需要创建100多个wix项目并将这些文件添加到该项目中

您还可以使用heat.exe在要安装的项目上创建生成后事件。例如(可能需要对项目进行一些调整/更改)

调用“C:\Program Files(x86)\WiX Toolset v3.6\bin\heat.exe”项目
“$(ProjectDir)$(ProjectFileName)”-directoryid INSTALLDIR-pog Content
-gg-scom-sreg-sfrag-out“$(SolutionDir)已安装\$(ProjectName).Content.wxs”

然后,您可以将输出文件链接到WiX项目,这样,当您添加文件或dll时,它将再次自动生成,并且您的文件将保持同步。现在您只需要创建某种product.wxs模板,以便在所有wix项目中使用


我认为这里的解决方案是结合使用PowerShell和heat.exe。可以使用上述命令为项目生成wxs文件。但是您仍然需要手动添加wix项目

你与Wix有严格的联系吗

也许您可以切换到NSIS或Inno设置,它们是免费的(开源)系统

使用NSIS/Inno安装程序有Visual Studio扩展,它可以处理VS安装项目(.vdproj)并转换它们-。

我建议看一下Wix#

对于需要创建Windows Installer MSI来部署应用程序的C#开发人员来说,Wix#可能是Microsoft从VS2012开始从Visual Studio中删除的“打包和部署”项目类型的最佳替代品。Wix是Wix工具集的C#前端,允许用C#语言构建完整的Windows安装程序MSI

您特别提到,所有安装程序都是简单的项目,它们在安装过程中使用自定义操作将文件安装到给定位置,以使.config文件特定于位置(用实际值替换标记)

Wix#非常适合这种类型的需求,假设您的项目确实如您所示非常相似。对于一个典型的程序,您可以用C语言开发一个好的Wix示例,然后为每增加一个.vdproj安装程序克隆100次(或克隆多少次)。更好的是,如果您的团队成员擅长T4模板,您可能可以使用T4模板自动将第一个C#Wix#原型安装程序转换为模板,然后使用该模板为其余项目自动生成其余99.cs Wix#代码文件

下面是您请求的Wix安装程序类型的C代码示例。这假设您已经编写了一个名为“TailorMyConfig.exe”的实用程序,例如,一个使用ConfigurationManager.AppSettings例程的简单C#程序,并且您正在将此exe与应用程序一起部署

使用系统;
使用System.Windows.Forms;
使用系统诊断;
使用Microsoft.Deployment.WindowsInstaller;
使用WixSharp;
类脚本
{
静态公共void Main(字符串[]args)
{
var project=新项目(“MyProduct”,
新目录(@“%ProgramFiles%\My Company\My Product”,
新文件(@“Files\Bin\MyApp.exe”),
新文件(@“Files\Bin\TailorMyConfig.exe”),
新ManagedAction(“UpdateConfigFile”);
project.Id=新Guid(“6f330b47-2577-43ad-9095-1861ba25889b”);
编译器.BuildMsi(项目);
}
}
公共类行动
{
[海关行动]
公共静态操作结果UpdateConfigFile(会话)
{
如果(DialogResult.Yes==MessageBox.Show(“配置文件更新准备就绪,可以运行了。\n是否立即更新配置文件?”,
“配置裁剪实用程序”,
MessageBoxButtons.YesNo)
{
Process.Start(“TailorMyConfig.exe”,“运行实用程序将配置文件定制到当前系统”);
}
返回操作结果。成功;
}
}
请注意,使用WiX功能修改配置文件有“更好”的方法。为简单起见,上面的示例假设使用自定义编写的C#exe实用程序来修改配置文件。我建议改为使用WIXXML功能。您可以使用“XML注入”的WiX技术将几乎任何WiX XML功能直接合并到您的WiX设置中

记住,Wix只是一个发出wixxml语法的C前端。在Wix#发出wixxml(wxs文件)之后,可以轻松地对该wxs文件进行后处理,以插入额外的wixxml特性。然后,WiX工具集将生成的wxs文件编译成MSI

有关使用XML注入将WIXXML功能合并到WiX#(C#)安装中的示例,请参见此处 在这个问题中,请参阅我的答案,它使用了将委托连接到“WixSourceGenerated”事件的技术

你可以