如何使用#define 加载任务?
How can I use #define to load tasks?
我尝试找到加载插件和任务的最佳方式,以防出现重大更改。
背景
我已经基于 Cake 0.25.0 创建了一个插件和几个任务。插件和任务打包在一个 NuGet 包中。现在我想将使用过的 Cake 版本更新到 0.32.1 但这并不容易,因为我会在下面解释。
我创建的这些 NuGet 包在多个存储库中使用,我不时提供修补程序。为了能够自动加载 addin/tasks 的最新版本,预处理器指令中没有定义任何版本。意思是这样的:
#load nuget:My.Tasks
#addin nuget:My.AddIn
我的困境
我需要确保旧版本仍然可以使用上面提到的预处理器指令。现在我正在寻找一种方法来实现这个目标。
我认为重命名原始包 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
这没有按预期工作。不幸的是,各个包的两个版本都分别加载到插件工具目录中,我收到 "error CS0111: Type 'Submission#0' already defines a member called" 和其他错误。
有没有办法实现我的目标?从我的角度来看,使用#define 的想法非常好。也许这是可能的,或者有人知道更好的方法吗?
我个人认为最好的办法是,如果 Cakebuild 支持预处理器指令中的通配符,例如
#load nuget:My.Tasks&version=1.0.*
此致
先生。 T
Ifdef 目前不能使用预处理器指令,因为它们在预处理器指令执行后由 C# 编译器处理。
你可以做的是使用环境变量,预处理器指令支持环境变量替换。
举个例子:
设置变量
RECIPE_VERSION="&version=0.3.0-unstable0400"
可以这样用
#load nuget:?package=Cake.Receipe%RECIPE_VERSION%
如果没有设置环境变量,它会忽略版本。
我尝试找到加载插件和任务的最佳方式,以防出现重大更改。
背景
我已经基于 Cake 0.25.0 创建了一个插件和几个任务。插件和任务打包在一个 NuGet 包中。现在我想将使用过的 Cake 版本更新到 0.32.1 但这并不容易,因为我会在下面解释。
我创建的这些 NuGet 包在多个存储库中使用,我不时提供修补程序。为了能够自动加载 addin/tasks 的最新版本,预处理器指令中没有定义任何版本。意思是这样的:
#load nuget:My.Tasks
#addin nuget:My.AddIn
我的困境
我需要确保旧版本仍然可以使用上面提到的预处理器指令。现在我正在寻找一种方法来实现这个目标。 我认为重命名原始包 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
这没有按预期工作。不幸的是,各个包的两个版本都分别加载到插件工具目录中,我收到 "error CS0111: Type 'Submission#0' already defines a member called" 和其他错误。
有没有办法实现我的目标?从我的角度来看,使用#define 的想法非常好。也许这是可能的,或者有人知道更好的方法吗?
我个人认为最好的办法是,如果 Cakebuild 支持预处理器指令中的通配符,例如
#load nuget:My.Tasks&version=1.0.*
此致
先生。 T
Ifdef 目前不能使用预处理器指令,因为它们在预处理器指令执行后由 C# 编译器处理。
你可以做的是使用环境变量,预处理器指令支持环境变量替换。
举个例子:
设置变量
RECIPE_VERSION="&version=0.3.0-unstable0400"
可以这样用
#load nuget:?package=Cake.Receipe%RECIPE_VERSION%
如果没有设置环境变量,它会忽略版本。