跨 .cake 文件共享全局变量

Sharing global variables across .cake files

我使用 CAKE 0.21.1.0.

我的 build.cake 脚本加载另一个 .cake 脚本:tests.cake.

我在 build.cake 中定义了一些全局变量,我想在我的两个 .cake 脚本中使用它们。

假设我有一个名为 testDllPath.

的全局变量

当我在 tests.cake 中使用 testDllPath 时,我看到以下错误:

error CS0120: An object reference is required for the non-static field, method, or property 'testDllPath'

如果我尝试在 tests.cake 中声明一个也名为 testDllPath 的新变量,我会看到此错误:

error CS0102: The type 'Submission#0' already contains a definition for 'testDllPath'

我应该如何从另一个 .cake 文件访问 build.cake 中定义的全局变量?

是的,如果您在声明后加载它。

即这行不通

#load "test.cake"
FilePath testDLLPath = File("./test.dll");

这会起作用

FilePath testDLLPath = File("./test.dll");
#load "test.cake"

一种更优雅的方法可能是让文件包含公共变量并首先加载它,即

#load "parameters.cake"
#load "test.cake"

如果您尝试从静态方法或 class 访问局部变量,由于作用域的原因,这将不起作用。

在这些情况下,您有几个选择

  1. 将变量传递给方法
  2. 传递变量class构造函数
  3. 使用 public static properties/fields 可以从任何地方访问。

static/parameter 的优点是加载顺序无关紧要。

示例局部变量静态方法

File testDLLPath = File("./test.dll");

RunTests(testDLLPath);

public static void RunTests(FilePath path)
{
    // do stuff with parameter path
}

示例将变量传递给构造函数

File testDLLPath = File("./test.dll");

var tester = new Tester(testDLLPath);

tester.RunTests();


public class Tester
{
   public FilePath TestDLLPath { get; set; }       

   public void RunTests()
   {
       //Do Stuff accessing class property TestDLLPath
   }

   public Tester(FilePath path)
   {
        TestDLLPath = path;
   }
}

示例静态属性

BuildParams.TestDLLPath  = File("./test.dll");

RunTests();


public static void RunTests()
{
    // do stuff with BuildParams.TestDLLPath
}

public static class BuildParams
{
   public static FilePath TestDLLPath { get; set; }    
}