在Visual Studio/MSBuild中运行程序集后处理的正确生成事件是什么?

本文关键字:事件 是什么 后处理 Studio Visual MSBuild 程序集 运行 | 更新日期: 2023-09-27 18:33:23

我正在使用名为AfterThought的PostSharp替代方案来对解决方案中的一些项目进行后处理。不幸的是,看起来项目的后期生成事件命令行属性不是插入后处理器的正确扩展点,因为在触发后生成事件和运行后处理器之前,编译的程序集被复制到某些依赖项目。有趣的是,该问题仅发生在网站和 Web 服务项目 - 依赖类库获得了程序集的后处理版本,但我想问题的核心在于构建后事件调用太晚,我应该使用不同的事件。

所以我想我需要直接在 *.csproj 文件中增强我的项目的构建过程/MSBuild - 对吗?哪个构建事件适合调用命令行程序集后处理器?

在Visual Studio/MSBuild中运行程序集后处理的正确生成事件是什么?

有两个:

  • <Target Name="AfterBuild"将运行 MSBuild 命令
  • <PropertyGroup><PostBuildEvent>将运行 shell 命令,并且可以从 Visual Studio 的项目对话框中作为"生成事件"选项卡下的"生成后事件命令行"进行访问

我的问题的最终解决方案是 CompileDependsOn 目标:

  <Target Name="AfterThought">
    <Exec Command="&quot;$(SolutionDir)..'LIBS'Afterthought'Afterthought.Amender.exe&quot; &quot;@(IntermediateAssembly->'%(FullPath)')&quot; &quot;$(SolutionDir)..'Amendments'bin'$(Configuration)'Amendments.dll&quot; @(ReferencePath->'&quot;%(RootDir)%(Directory).&quot;', ' ')" />
  </Target>
  <PropertyGroup>
    <CompileDependsOn>
    $(CompileDependsOn);
    AfterThought;
   </CompileDependsOn>
  </PropertyGroup>