如何:发布一个解决方案中的多个项目
一个解决方案可以包含多个项目,但 ClickOnce 部署存在这样的约束:一次只能发布一个项目。 对于包含许多项目的解决方案而言,逐个发布项目很麻烦。 本过程演示了如何使用一个宏自动发布一个解决方案中的所有项目。
创建发布宏
打开 Macro 资源管理器。 从**“工具”菜单上单击“宏”,然后单击“Macro 资源管理器”**。
创建一个新的宏模块。 在 Macro 资源管理器中选择**“MyMacros”节点。 从“工具”菜单上单击“宏”,然后单击“新建宏模块”**。 将该模块命名为 PublishAllProjects。
在 Macro 资源管理器中打开**“MyMacros”节点,然后通过双击“PublishAllProjects”模块打开该模块(或从“工具”菜单上单击“宏”,然后单击“宏 IDE”**)。
在“宏 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
关闭“宏 IDE”。 焦点将返回到 Visual Studio。
发布一个解决方案中的所有项目
创建一个 Visual Basic Windows 应用程序项目。 在**“文件”菜单上,单击“新建项目”**。
在**“新建项目”对话框中,从“Visual Basic”节点选择“Windows 应用程序”**。 将该项目命名为 MultiProj。
将另外两个 Windows 应用程序项目添加到 MultiProj 解决方案中。 将它们分别命名为 Proj1 和 Proj2。
首先发布解决方案中的每个项目。 宏要求对 ClickOnce 清单进行签名并为每个项目设置安全区域。 在使用宏之前,使用集成开发环境 (IDE) 发布每个项目;发布过程将对 ClickOnce 清单进行签名,并会设置安全区域,要运行宏就必须执行这些操作。
在**“解决方案资源管理器”中选择 MultiProj。 从“项目”菜单中选择“属性”。 在项目设计器中单击“发布”选项卡。 在“发布”页上指定发布位置 publish\,然后单击“立即发布”**。
针对解决方案中的其他项目重复该过程。
在 Visual Studio 命令窗口中调用宏,再次发布 MultiProj。 若要查看命令窗口,请从**“视图”菜单上单击“其他窗口”,然后单击“命令窗口”,或按“Ctrl+Alt+A”**。 在命令窗口中键入 macros;自动完成功能将提供可用宏的列表。 选择以下宏并按 Enter:
Macros.MyMacros.PublishAllProjects.PublishAllProjectsInSolution
当每个项目的发布过程成功完成后,您将收到一条消息指出“MultiProj\MultiProj.vbproj 发布成功”。在每个消息框上单击“确定”。
查看每个项目目录中的发布子目录。 您应看到清单、setup.exe 和发布网页文件。