我试图找到加载插件和任务的最佳方式,以防发生重大变化。
背景
我已经创建了一个插件和几个基于 Cake 0.25.0 的任务。插件和任务都打包在 NuGet 包中。现在我想将使用的 Cake 版本更新到 0.32.1,但这并不像我尝试在下面解释的那样容易。
我创建的这些 NuGet 包在多个存储库中使用,我不时提供修补程序。为了能够自动加载最新版本的插件/任务,预处理器指令中没有定义版本。意思是这样的:
#load nuget:My.Tasks
#addin nuget:My.AddIn
Run Code Online (Sandbox Code Playgroud)
我的困难
我需要确保旧版本仍然可以使用上述预处理器指令。现在我正在寻找一种方法来实现这个目标。我认为重命名原始包 ID 会有所帮助,并且每个想要使用我的包的升级版本的人都必须在他们的 build.cake 中更改预处理器指令。
但我很确定一定有更聪明的方法,我希望你能帮助我。
我的下一个想法是使用 #define 预处理器指令。所以我创建了一个新的 NuGet 包,其中只包含一个名为 bootstrapper.cake 的 Cake 脚本,如下所示:
#if (V20)
#load nuget:My.Tasks
#addin nuget:My.AddIn
#else
#load nuget:My.Tasks&version=1.0.55
#addin nuget:My.AddIn&version=1.0.55
#end
Run Code Online (Sandbox Code Playgroud)
这不会按预期工作。不幸的是,相应软件包的两个版本都分别加载到插件工具目录中,我收到了诸如“错误 CS0111:类型‘提交#0’已经定义了一个名为”等的错误。
有没有办法实现我的目标?从我的角度来看,使用 #define 的想法非常好。也许这是可能的,或者有没有人知道更好的方法?
我个人认为最好的是,如果 Cakebuild 支持预处理器指令中的通配符,如
#load nuget:My.Tasks&version=1.0.*
Run Code Online (Sandbox Code Playgroud)
此致
T先生
cakebuild ×1