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

C# 在Visual Studio/MSBuild中运行程序集后处理的正确生成事件是什么,c#,visual-studio,assemblies,post-processing,C#,Visual Studio,Assemblies,Post Processing,我正在使用PostSharp alternative对解决方案中的一些项目进行后处理。不幸的是,项目的生成后事件命令行属性似乎不是插入后处理器的正确扩展点,因为在触发生成后事件并运行后处理器之前,已编译程序集被复制到一些依赖项目。有趣的是,这个问题只发生在web站点和web服务项目中-依赖类库获得了程序集的后处理版本,但我想问题的核心在于调用后构建事件太晚,我应该使用不同的事件 因此,我想我需要直接在*.csproj文件中增强项目的构建过程/MSBuild,对吗?调用命令行汇编后处理器的正确生成

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

因此,我想我需要直接在*.csproj文件中增强项目的构建过程/MSBuild,对吗?调用命令行汇编后处理器的正确生成事件是什么?

有两个:


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

      <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>
    
    
    “%”(完整路径)“$(解决方案目录)…\Amendments\bin\$(配置)\Amendments.dll“@(引用路径->”“%(根目录)%”(目录)。“,”/>
    美元(已编撰);
    事后思考;
    
    PostBuildEvent是我到目前为止尝试过的一个,但是执行得太晚了-程序集已经复制到依赖项目(在后处理器运行之前)。我刚刚尝试了后建目标,但结果是一样的。我需要一些生成事件,它发生在编译的程序集复制到依赖项目之前。除非我弄错了,否则它会在将程序集复制到引用项目之前完成当前项目的生成(包括这两个事件)。复印件是怎么做的?只是项目参考资料吗?也许您改为链接到了/bin/Debug中的程序集?项目的构建顺序是否使得另一个项目实际上是先构建的?它是项目引用,并且构建顺序是正确的。当依赖项目是简单的类库时,问题就出现在web站点和web应用程序项目中。我只是尝试使用AfterCompile事件,但它看起来好像在输出文件夹中还不存在程序集..你可以作为web应用程序项目的一部分来做吗?是的,我可以,但这将是非常丑陋和不系统的。解决方案相当大(超过30个项目),很多项目都在后期处理中。我还可以创建集成到项目依赖项/构建链中的空项目,它只会调用后处理器,但我喜欢干净的解决方案-这意味着从项目本身调用后处理器..没有机会使用任何一个,但我想你可以马上安装PostSharp并查看它的目标文件,找出它是如何/何时/何地将自己添加到构建过程中的,然后在事后再做同样的事情?这篇博文让人觉得他们把自己加入了CompiledPendson?我刚刚尝试使用CompiledPendson,但看起来程序集($(TargetPath))在项目输出中还不可用$(彭德森汇编);事后思考;我刚刚发现我必须在CompiledPendson中使用@(MediateAssembly)而不是$(TargetPath)。在我应用这个调整之后,构建过程开始按照我的预期工作。