Visual Studio 2012 中缺少部署项目类型

Posted

技术标签:

【中文标题】Visual Studio 2012 中缺少部署项目类型【英文标题】:Missing Deployment Project Type in Visual Studio 2012 【发布时间】:2013-04-16 04:49:53 【问题描述】:

我不是全职程序员,但必须做一些工作来构建工具来支持我的工作。我已经完成了我现在需要部署的应用程序的编写。

我不想使用“ClickOnce”,因为我需要在配置时更改“本地”文件夹中的文件。我的理解是,如果我使用 Build 菜单下的 Publish 选项,那么我使用的是“ClickOnce”。

我的研究使我相信“​​您可以通过在解决方案中添加一个或多个部署项目来做到这一点”。 MSDN 然后声明,要实现这一点,我需要选择“添加项目”和“在生成的添加新项目对话框中,选择设置和部署项目文件夹。”

问题是,我没有这个选项?!

有人可以解释为什么会这样,以及我如何解决它。我用谷歌搜索了半天,找不到前进的方向?

项目及系统详情如下:

环境:适用于 Windows 桌面的 Visual Studio 2012 Express。 当前项目:Windows 窗体应用程序。 操作系统:Windows 7 专业版。

【问题讨论】:

【参考方案1】:

虽然它的建议可能是正确的,但这是您正在阅读的旧教程。它可能指的是 Visual Studio 2010。

That option has been removed in VS 2012。您将需要使用替代工具来构建安装程序。例如:

WiX Inno Setup InstallShield ……等

【讨论】:

【参考方案2】:

我强烈建议查看 Wix#。见http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX。如果您使用 C#、Wix# 进行编码,这可能是添加的最简单、最舒适的技能集,而且它是免费的,并且可以直接集成到您正在使用的 Visual Studio 环境中。

更多信息请访问 Wix# CodePlex 主页:http://wixsharp.codeplex.com/

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

Wix# 适用于广泛的安装/部署场景,并且非常适合持续集成场景。有用于部署 Windows 桌面应用程序、安装 Windows 服务、安装 ASP.NET 网站以及更多类型的安装的 Wix# 示例。

问题提到需要在 Windows 7 上安装应用程序。Wix# 支持此环境,并处理典型的安装程序要求,简单项目的 Wix# 安装程序代码确实很简单。对于更复杂且需要高级功能的应用程序安装,Wix# 可以在需要时利用完整 WiX 工具集的强大功能。例如,在安装 .NET 应用程序时,典型的要求是安装应用程序 exe 和 dll 文件,并在目标系统上定制一些 .NET 配置文件和/或注册表项。

下面是一个简单的 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 XML 功能修改配置文件。为简单起见,上面的示例假定使用自定义编写的 C# exe 实用程序来修改配置文件。我建议改用 WiX XML 功能来执行此操作。您可以使用“XML 注入”的 Wix# 技术将几乎所有 WiX XML 功能直接合并到您的 Wix# 设置中。

请记住,Wix# 只是一个发出 WiX XML 语法的 C# 前端。在 Wix# 发出 WiX XML(wxs 文件)之后,可以轻松地对该 wxs 文件进行后处理以插入其他 WiX XML 功能。然后生成的 wxs 文件由 WiX 工具集编译成 MSI。

有关使用 XML 注入将 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?

安装程序的另一个典型要求是在目标系统上添加或修改 Windows 注册表项。 Wix# 使用“RegValue”类提供直接支持。使用 Wix# 的好处是,您还可以免费获得完整的“卸载”功能,包括将注册表项卸载/恢复到预安装状态。这是基于 WiX 工具集和 Windows Installer 技术构建的 Wix# 的自然结果。仅注册表 Wix# 安装程序的示例如下:In Wix#, how to avoid creating a physical folder on the target system, when deploying only registry entries?

Wix# 方法在我的环境中非常有用,它允许使用熟悉的 C# 技能组,而不必一头扎进 WiX XML 安装程序技术的全部复杂性。

【讨论】:

以上是关于Visual Studio 2012 中缺少部署项目类型的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 项目:缺少 Properties/Settings.settings

Visual Studio 2012/13 在导出的模板中缺少 MVC NuGet

Visual Studio 2012 中缺少 ASP.NET Web 应用程序模板

Visual Studio 2012 上的计算机错误中缺少 GDAL201.dll

Visual Studio 2012,monogame项目,缺少项目子类型?

Visual Studio 2010 中缺少 javascript 智能感知