有条件地复制依赖项MSBuild

本文关键字:MSBuild 依赖 复制 有条件 | 更新日期: 2023-09-27 18:07:30

我们已经设置了我们的解决方案,以便项目A引用项目B,项目B引用项目C,项目C有一个引用本机dll的。net包装器。

→B→C→通过。net包装器的本地dll

卷积的原因是我们正在处理第三方硬件,或者我们将直接从项目b中引用dll。总之——

我们正在尝试获得一些在项目C中引用的文件(本机dll),复制到项目a中。复制本地与构建动作"Content"不工作,因为MSBuild会失败,说它不能覆盖文件,因为一旦它们启动,进程不会在自己之后清理并保持运行。

  1. 是否有可能让MSBuild在构建之前尝试杀死进程?

  2. 是否有可能有条件地将本地dll从项目B复制到项目A,如果它们不存在MSBuild?项目A的bin文件夹是它们启动的地方,也是构建失败的地方(不是从项目C到项目B)。

有条件地复制依赖项MSBuild

听起来您的主要问题是您的应用程序没有自行清理。如果您的应用程序正在启动进程,它应该在关闭时停止这些进程。你应该调用Process.Kill()在你的应用程序关闭之前启动的任何进程。

话虽如此,1)和2)都是可能的:

1)你可以使用Exec任务从msbuild调用任何可执行文件。您可以使用此任务调用"taskkill"命令。

 <Target Name="BeforeBuild">
    <Exec Command="taskkill /IM ProcessToKill.exe /F"/>
</Target>

2) msbuild Copy任务有一个"SkipUnchangedFiles"参数,只复制比现有文件新的文件:

<Target Name="AfterBuild">
    <Copy
        SourceFiles="@(DllLocation)"
        DestinationFolder="@(DllLocation->'$(OutputDir)%(RecursiveDir)%(Filename)%(Extension)')"
        SkipUnchangedFiles="true"
    />
</Target>