4

有没有办法为整个解决方案中的所有项目设置和/或更改构建后事件/操作?我有一些解决方案,其中最多包含 50 个项目,除了 2 个项目外,它们都需要相同的后期构建操作。当我有一个新的解决方案或者我必须更改现有解决方案的所有项目的构建后操作时,我必须运行所有项目设置,转到编译选项卡页面并编辑构建后操作。

能够为整个解决方案设置后期构建操作的任何其他解决方案也将受到赞赏。也许是 MS Build,但我在那里没有经验......

使用 Visual Studio 2012 和 VB.Net 项目。

4

3 回答 3

1

您可以创建一个简单的应用程序,它可以接收多个 .csproj 文件和一个简单的多行文本框,您可以在其中粘贴您的后期构建操作。

因此,在 1 个项目中编辑后期构建。在记事本中打开项目文件,查找<PostBuildEvent>...</PostBuildEvent>并将其粘贴到多行文本框中,然后遍历所有项目文件并将此 xml 元素添加到其中。

在此处输入图像描述

于 2013-03-12T13:04:19.100 回答
1

我使用 Visual Studio 宏执行此操作。

在宏编辑器 ( Alt+ F11) 中有 EvironmentEvents 文件。
这里我使用BuildEvents_OnBuildProjConfigDone事件。
我一直使用它来将程序集复制到我的工作文件夹中。

例子:

Private targetPath As String = "C:\..."  

Private Sub BuildEvents_OnBuildProjConfigDone(ByVal ProjectName As String, ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone
    On Error GoTo ext
    If Not Success Then Exit Sub

    'Absolute path to assembly
    Dim tar = targetPath
    Dim project As Project = DTE.Solution.Projects.Item(ProjectName)
    Dim projectFolder As String = Path.GetDirectoryName(project.FileName)
    Dim config As EnvDTE.Configuration = project.ConfigurationManager.ActiveConfiguration
    Dim outputPath As String = CStr(config.Properties.Item("OutputPath").Value)
    Dim assemblyName As String = CStr(project.Properties.Item("AssemblyName").Value)
    Dim assemblyFileName As String = CStr(project.Properties.Item("OutputFileName").Value)
    Dim src As String = Path.Combine(Path.Combine(projectFolder, outputPath), assemblyFileName)

    'Copy files to working folder
    On Error GoTo err
    Dim dst As String

    dst = Path.Combine(tar, assemblyFileName)
    DTE.ToolWindows.OutputWindow.ActivePane.OutputString(outTag + assemblyName + " -> " + dst + vbCrLf)
    File.Copy(src, dst, True)

    src = src.Substring(0, src.Length - 3) + "pdb"
    dst = dst.Substring(0, dst.Length - 3) + "pdb"
    DTE.ToolWindows.OutputWindow.ActivePane.OutputString(outTag + assemblyName + " -> " + dst + vbCrLf)
    File.Copy(src, dst, True)

    Exit Sub

err:
    DTE.ToolWindows.OutputWindow.ActivePane.OutputString(outTag + Err.Description + vbCrLf)
ext:
End Sub
于 2013-03-12T13:11:15.720 回答
0

Are you aware that you can select multiple projects in Solution Explorer (using Ctrl-pick or Shift-pick), then change all projects at once?

于 2013-03-13T02:54:11.627 回答