Visual studio VS 2010:需要项目仅充当MSBUILD脚本的触发器,而不编译为程序集

Visual studio VS 2010:需要项目仅充当MSBUILD脚本的触发器,而不编译为程序集,visual-studio,visual-studio-2010,msbuild,Visual Studio,Visual Studio 2010,Msbuild,我有一个包含多个web应用程序项目的解决方案。在所有项目构建完成后,我需要运行MSBUILD脚本 我过去所做的是从一个现有项目中调用脚本(通过.csproj文件中的)。然而,我必须确保我使用了最后构建的项目,如果构建顺序发生变化,我将得到意想不到的结果 因此,我决定创建一个空的web应用程序项目,并设置项目依赖项,使其始终最后生成,然后将MSBUILD脚本附加到此项目 所以现在它总是在正确的时间运行,但是我得到了一个额外的(微小的)程序集,这是由于构建了一个假定为空的项目。项目中没有代码文件(A

我有一个包含多个web应用程序项目的解决方案。在所有项目构建完成后,我需要运行MSBUILD脚本

我过去所做的是从一个现有项目中调用脚本(通过.csproj文件中的
)。然而,我必须确保我使用了最后构建的项目,如果构建顺序发生变化,我将得到意想不到的结果

因此,我决定创建一个空的web应用程序项目,并设置项目依赖项,使其始终最后生成,然后将MSBUILD脚本附加到此项目

所以现在它总是在正确的时间运行,但是我得到了一个额外的(微小的)程序集,这是由于构建了一个假定为空的项目。项目中没有代码文件(AssemblyInfo.cs除外),但始终生成程序集


那么,有没有一种方法可以停止正在生成的程序集,或者有没有一种方法可以将MSBUILD脚本作为一个整体附加到解决方案并完全避免这个虚拟项目?

MSBUILD 4.0中,有两个新的钩子可用于在生成解决方案之前和之后运行脚本。在解决方案文件上运行MSBuild时,它将在解决方案目录中查找两个目标文件:

  • 之前.SolutionName.sln.targets
  • 之后.SolutionName.sln.targets
如果找到这些文件中的任何一个,它将在适当的阶段自动执行

在您的情况下,为了在解决方案中的所有项目生成后运行脚本,您可以在.MySolution.sln.targets文件之后创建一个类似的文件:


另请参见:


我没有足够的声誉点数来评论Enrico的公认答案,因此我只在这里评论,当您在Visual Studio 2010中运行构建时,这不起作用。当MSBuild作为命令行运行时,它确实起作用

<Target Name="RunPostBuildScripts" AfterTargets="Build">
    <MSBuild Projects="PostBuild.targets" />
</Target>