如何:发布一个解决方案中的多个项目

一个解决方案可以包含多个项目,但 ClickOnce 部署存在这样的约束:一次只能发布一个项目。 对于包含许多项目的解决方案而言,逐个发布项目很麻烦。 本过程演示了如何使用一个宏自动发布一个解决方案中的所有项目。

创建发布宏

  1. 打开 Macro 资源管理器。 从**“工具”菜单上单击“宏”,然后单击“Macro 资源管理器”**。

  2. 创建一个新的宏模块。 在 Macro 资源管理器中选择**“MyMacros”节点。 从“工具”菜单上单击“宏”,然后单击“新建宏模块”**。 将该模块命名为 PublishAllProjects。

  3. 在 Macro 资源管理器中打开**“MyMacros”节点,然后通过双击“PublishAllProjects”模块打开该模块(或从“工具”菜单上单击“宏”,然后单击“宏 IDE”**)。

  4. 在“宏 IDE”中,将以下代码添加到该模块中 Import 语句的后面:

    Public Module PublishAllProjects
        Sub PublishAllProjectsInSolution()
            ' Before using this macro, the certficate and security zone must be set.
            ' You can do this by publishing the projects using the VS IDE.
            Dim slnbld2 As SolutionBuild2 = CType(DTE.Solution.SolutionBuild, SolutionBuild2)
    
            'Save changes to all projects and clean.
            For Each proj As Project In DTE.Solution.Projects
                proj.Save()
            Next
            slnbld2.Clean(True)
    
            For Each proj As Project In DTE.Solution.Projects
                'Verify project is a windows application or console application before continuing
                Dim outputType As Integer = proj.Properties.Item("OutputType").Value
                If outputType <> 0 AndAlso outputType <> 1 Then
                    Continue For
                End If
    
                'GenerateManifests and SignManifests must always to true for publishing to work. 
                proj.Properties.Item("GenerateManifests").Value = True
                proj.Properties.Item("SignManifests").Value = True
                proj.Save()
    
                slnbld2.BuildProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, proj.UniqueName, True)
    
                'only publish if build was successful.
                If slnbld2.LastBuildInfo <> 0 Then
                    MsgBox("Build failed for " & proj.UniqueName)
                Else
                    slnbld2.PublishProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, proj.UniqueName, True)
                    If slnbld2.LastPublishInfo = 0 Then
                        MsgBox("Publish succeeded for " & proj.UniqueName)
                    Else
                        MsgBox("Publish failed for " & proj.UniqueName)
                    End If
                End If
            Next
    
        End Sub
    End Module
    
  5. 关闭“宏 IDE”。 焦点将返回到 Visual Studio。

发布一个解决方案中的所有项目

  1. 创建一个 Visual Basic Windows 应用程序项目。 在**“文件”菜单上,单击“新建项目”**。

  2. 在**“新建项目”对话框中,从“Visual Basic”节点选择“Windows 应用程序”**。 将该项目命名为 MultiProj。

  3. 将另外两个 Windows 应用程序项目添加到 MultiProj 解决方案中。 将它们分别命名为 Proj1 和 Proj2。

  4. 首先发布解决方案中的每个项目。 宏要求对 ClickOnce 清单进行签名并为每个项目设置安全区域。 在使用宏之前,使用集成开发环境 (IDE) 发布每个项目;发布过程将对 ClickOnce 清单进行签名,并会设置安全区域,要运行宏就必须执行这些操作。

    在**“解决方案资源管理器”中选择 MultiProj。 从“项目”菜单中选择“属性”。 在项目设计器中单击“发布”选项卡。 在“发布”页上指定发布位置 publish\,然后单击“立即发布”**。

    针对解决方案中的其他项目重复该过程。

  5. 在 Visual Studio 命令窗口中调用宏,再次发布 MultiProj。 若要查看命令窗口,请从**“视图”菜单上单击“其他窗口”,然后单击“命令窗口”,或按“Ctrl+Alt+A”**。 在命令窗口中键入 macros;自动完成功能将提供可用宏的列表。 选择以下宏并按 Enter

    Macros.MyMacros.PublishAllProjects.PublishAllProjectsInSolution

  6. 当每个项目的发布过程成功完成后,您将收到一条消息指出“MultiProj\MultiProj.vbproj 发布成功”。在每个消息框上单击“确定”。

  7. 查看每个项目目录中的发布子目录。 您应看到清单、setup.exe 和发布网页文件。

请参见

任务

如何:编辑宏和以编程方式创建宏

如何:发布具有特定区域设置的项目

参考

Macro 资源管理器窗口

概念

发布 ClickOnce 应用程序

其他资源

宏开发环境