我不想将msbuild任务打包到dll中。相反,我想在一个独立的源文件中提供它的C#代码,并定义如下:
<UsingTask TaskName="MyTask" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<Task>
<Code Source="$(MSBuildThisFileDirectory)\MyTask.cs" Language="cs" />
</Task>
</UsingTask>
原因-我不想将我的任务作为DLL提交到版本控制中,因为如果我更改它,如果原始DLL是由msbuild节点加载的,则devs可能无法提取更改的DLL。这会引起我喜欢避免的各种摩擦。
但问题是-如果我的任务必须依赖于第三方DLL呢?我可能会去做,因为我不会改变它,但是之后呢?
那么,我的问题--是否有一种方法可以将作为C#源文件分发的自定义msbuild任务引用第三方DLL,例如NuGet包?
发布于 2022-07-20 01:32:57
您正在创建的任务类型在MSBuild文档中称为“内联任务”。使用内联任务删除构建脚本中的依赖项是有意义的。
不幸的是,内联任务不支持NuGet。没有用于内联任务的PackageReference
。您可以有一个NuGet步骤来还原给定的包,并且可以在内联任务中添加一个Reference
到包的已知位置,但这会开始变得混乱,并产生一些依赖和鸡/蛋问题,我认为这是您想要避免的。
如果您无法避免NuGet包依赖,并且您有一个私有和/或内部的NuGet服务器,那么您可以考虑将自定义任务移动到它自己的DLL和它自己的构建和NuGet包中。
https://stackoverflow.com/questions/72456641
复制相似问题