我们设置了解决方案,以便Project A References Project B,Project B引用Project C,而Project C有一个引用本机DLL的.NET包装器。
A - > B - > C - >通过.NET Wrapper的本机DLL
卷积的原因是我们正在处理第三方硬件,或者我们将直接从项目B引用DLL。
我们正在尝试获取项目C中引用的一些文件(本机DLL),并将其复制到项目A. 使用“内容”的构建操作进行本地复制不起作用,因为MSBuild将失败说它不能覆盖文件,因为一旦它们启动它们就会启动,这些进程不会自行清理并继续运行。
是否有可能让MSBuild在构建之前尝试终止进程?
或者
答案 0 :(得分:1)
听起来你的主要问题是你的应用程序不会自行清理。如果您的应用程序正在启动进程,则应在关闭时停止它们。您应该在应用程序关闭之前启动的任何进程上调用Process.Kill()。
话虽如此,1)和2)都是可能的:
1)您可以使用Exec task从msbuild调用任何可执行文件。您可以使用此任务调用“taskkill”命令。
<Target Name="BeforeBuild">
<Exec Command="taskkill /IM ProcessToKill.exe /F"/>
</Target>
2)msbuild Copy task有一个“SkipUnchangedFiles”参数,只有当文件比现有文件更新时才会复制文件:
<Target Name="AfterBuild">
<Copy
SourceFiles="@(DllLocation)"
DestinationFolder="@(DllLocation->'$(OutputDir)%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true"
/>
</Target>