我对 MSBuild 了解不多,但对于 Visual Studio for C# 使用的 MSBuild 项目,有一个简单的替代方案:使用 Post-build 构建事件而不是 AfterBuild 目标。
您可以通过 Visual Studio 项目属性对话框的第三个选项卡“构建事件”设置构建后构建事件。在某些情况下,最好在此对话框中输入一些命令,然后在确定其工作方式后直接编辑 .csproj 文件。
记得在对话框中选择“运行此构建后事件:当构建更新项目输出时” - 这是获得 OP 请求的功能的关键。
就像我说的,我对 MSBuild 了解不多,可能是 Post-build 构建事件不适用于 AfterBuild 目标可以做的某些事情。但是我已经用它来复制文件和运行 BAT 脚本,而且它工作得很好。
编辑:
我将添加一些关于我通常如何在我的 C# 项目中使用构建后事件的注释。
为了区分不同的功能区域,我通常会创建一个名为 PostBuildEvent.bat 的 BAT 脚本,并将其放在与 .csproj 文件相同的文件夹中。然后我的构建后事件只包含两行:
cd $(ProjectDir)
PostBuildEvent.bat
然后我将我想要的命令放在 PostBuildEvent.bat 文件中。这是一个例子:
copy "..\..\..\..\..\Shared Bin\Merlinia.CommonClasses.NamedPipesNative.dll" bin
copy "..\..\..\..\..\Shared Bin\Merlinia.CommonClasses.NamedPipesNative.pdb" bin
cd Packed-NonObfuscated
call PackForWindowsSystem32-NonObfuscated.bat
cd ..\
cd Packed-Obfuscated
call PackForWindowsSystem32-Obfuscated.bat
cd ..\
pause
请记住,要从 BAT 脚本调用 BAT 脚本,您明确指定“调用”。还要注意“暂停”的使用 - 这可以通过双击 BAT 文件来测试脚本,然后您可以在 cmd 窗口中看到任何错误消息。当脚本通过 MSBuild 运行时,“暂停”将被忽略。