gpt4 book ai didi

cakebuild - 如何使用#define 加载任务?

转载 作者:行者123 更新时间:2023-12-02 03:20:01 25 4
gpt4 key购买 nike

我尝试找到加载插件和任务的最佳方法,以防发生重大更改。

背景

我基于 Cake 0.25.0 创建了一个插件和几个任务。插件以及任务都打包在 NuGet 包中。现在我想将使用的 Cake 版本更新到 0.32.1,但这并不像我在下面尝试解释的那么容易。

我创建的这些 NuGet 包在多个存储库中使用,并且我不时提供修补程序。为了能够自动加载最新版本的插件/任务,预处理器指令中没有定义版本。意思是这样的:

#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

这没有按预期工作。不幸的是,各个包的两个版本都分别​​加载到插件工具目录中,并且我收到诸如“错误 CS0111:类型'Submission#0'已经定义了一个名为”的成员等错误。

有办法实现我的目标吗?从我的角度来看,使用 #define 的想法非常好。也许这是可能的,或者有人知道更好的方法吗?

我个人认为最好的是,如果 Cakebuild 在预处理器指令中支持通配符,例如

#load nuget:My.Tasks&version=1.0.*

最诚挚的问候

先生。

最佳答案

Ifdef 目前无法使用预处理器指令,因为它们是在执行预处理器指令后由 C# 编译器处理的。

你可以做的是使用环境变量,预处理器指令支持环境变量替换。

举个例子:

设置变量

RECIPE_VERSION="&version=0.3.0-unstable0400"

可以这样使用

#load nuget:?package=Cake.Receipe%RECIPE_VERSION%

如果没有设置环境变量,它将省略版本。

关于cakebuild - 如何使用#define 加载任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55070896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com