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

更新:2007 年 11 月

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

创建发布宏

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

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

  3. 在宏资源管理器中打开“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 和发布网页文件。

请参见

任务

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

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

参考

宏资源管理器窗口

其他资源

发布 ClickOnce 应用程序

宏开发环境