【问题标题】:What is the proper build event to run assembly postprocessing in Visual Studio/MSBuild在 Visual Studio/MSBuild 中运行程序集后处理的正确构建事件是什么
【发布时间】:2012-05-15 07:59:02
【问题描述】:

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

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

【问题讨论】:

  • 没有机会使用任何一个,但我想你可以安装 PostSharp 并查看它的目标文件以了解它的方式/时间/位置将自身添加到构建过程中,然后为 AfterThought 做同样的事情?这篇博文表明他们将自己添加到 CompileDependsOn? sharpcrafters.com/blog/post/…
  • 我刚刚尝试使用 CompileDependsOn,但项目输出中似乎还没有程序集 ($(TargetPath))。 $(CompileDependsOn);事后思考;
  • 我刚刚发现我必须在 CompileDependsOn 中使用 @(IntermediateAssembly) 而不是 $(TargetPath)。应用此调整后,构建过程开始按我的预期工作。

标签: c# visual-studio assemblies post-processing


【解决方案1】:

有两个:

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

【讨论】:

  • PostBuildEvent 是我迄今为止尝试过的一个,但它执行得太晚了——程序集已经被复制到依赖项目中(在运行后处理器之前)。我刚刚尝试了 AfterBuild 目标,但结果是一样的。我需要一些在编译的程序集被复制到依赖项目之前发生的构建事件。
  • 除非我弄错了,它会在将程序集复制到引用的项目之前完成当前项目的构建——包括这两个事件。副本是如何完成的?它只是项目参考吗?也许您是否链接到 /bin/Debug 内的程序集?项目构建顺序是否使得这个其他项目实际上是首先构建的?
  • 是项目引用,构建顺序正确。问题是当依赖项目是简单的类库时它可以工作 - 问题只发生在网站和 Web 应用程序项目中。我只是尝试使用 AfterCompile 事件,但输出文件夹中似乎还不存在该程序集..
  • 你能把它作为 web 应用项目的 来做吗?
  • 是的,我可以,但它会非常丑陋且不系统。该解决方案非常大(超过 30 个项目),并且许多项目正在后处理中。我还可以创建集成到项目依赖项/构建链中的空项目,它只会调用后处理器,但我正在寻找干净的解决方案 - 这意味着从项目本身调用后处理器..
【解决方案2】:

我的问题的最终解决方案是 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2016-08-11
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2010-10-21
    相关资源
    最近更新 更多