一个解决方案可以包含多个项目,但 ClickOnce 部署存在这样的约束:一次只能发布一个项目。对于包含许多项目的解决方案而言,逐个发布项目很麻烦。本过程演示了如何使用一个宏自动发布一个解决方案中的所有项目。
创建发布宏
-
打开宏资源管理器。从“工具”菜单上单击“宏”,然后单击“宏资源管理器”。
-
创建一个新的宏模块。在宏资源管理器中选择“MyMacros”节点。从“工具”菜单上单击“宏”,然后单击“新建宏模块”。将该模块命名为 PublishAllProjects。
-
在宏资源管理器中打开“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 和发布网页文件。