跨 .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 访问局部变量,由于作用域的原因,这将不起作用。
在这些情况下,您有几个选择
- 将变量传递给方法
- 传递变量class构造函数
- 使用 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; }
}
我使用 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 访问局部变量,由于作用域的原因,这将不起作用。
在这些情况下,您有几个选择
- 将变量传递给方法
- 传递变量class构造函数
- 使用 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; }
}