一个解决方案可以包含多个项目,但 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 和发布网页文件。