有一个桌面解决方案(4.6 和网络标准 2.0),其中实际上存在三个级别的依赖关系——共享程序集(内核)、UI 程序集和插件(更准确地说,有几个,但它们是在依赖性方面相同)。
UI 程序集依赖于内核,正常构建在需要时成功复制程序集,不幸的是排除了本机依赖项。插件仍然更难过,因为。它们依赖于内核,但没有人应该知道它们,不能使用标准依赖项。
现在构建部分由 beforebuild 事件保证,但由于 不相关的项目可以按不同的顺序编译,有时你必须愚蠢地编译两次。另外,现在它是使用 xcopy 完成的,但我想要一个跨平台的构建。
据我了解,目标文件有一个选项,但除了文章https://rsdn.org/article/devtools/msbuild-05.xml#EVGAE之外,我没有找到任何有意义的帮助
另外,还有像 Cake (C# Make) 这样的不同的东西,但实际上这是一个单独的工具,你必须学习如何使用,而且这些解决方案的跨平台性也不清楚。
一般来说,你需要一些流行的解决方案,它有很好的dock,并且可以在没有拐杖的情况下做典型的解决方案(这样你就不必手动编写msbuild来构建项目)。

结果,msbuild 关闭了我所有的任务,尽管有些地方看起来很尴尬。
为插件编写了一个简单的单独目标:
然后,这样的目标很容易通过文件名连接到插件项目,
<Import Project="..\Sites.props"/>并自动将程序集复制到所需的文件夹。PS:这里要单独说明一下
TargetFramework,但它只适用于多目标项目,例如我的是在net461和netstandard2.0下制作的我在 netstandard 中将应用程序构建为自包含的,并且在这里添加程序集仅与“发布”事件挂钩,尽管 Google 上有很多其他提示。看起来像这样:
实际上,开发者skiasharp 已经修复了发布他的构建,但还没有发布。但是对于 sqlite interops,更新已经发布,所以这里只剩下skia。
PS:UserRoot 变量正在尝试确定 nuget 所在的文件夹。它不完全是跨平台的,但 Linux 和 Windows 在当前实现中工作。
一般来说,要分析目标的执行顺序并分析周围发生的事情,
msbuild -v:diag使用构建或发布就足够了。该日志还将记录所有已处理的目标及其顺序。与我在问题中提到的同一个 Cake 相比,msbuild 的一大优点是它已经有一堆计算变量,你只需要使用它们。此外,他的生命周期非常合乎逻辑(根据日志),并且很容易将目标与现有目标绑定。