静态字段失败,因为编译器认为它是非静态的

时间:2017-01-19 14:12:03

标签: cakebuild

在编写Cake插件时,我有以下内容:

public static class Aliases
{
[CakeMethodAlias]
public static VaultInfo GetVaultInfo(this ICakeContext context, string userName)
{
    Debugger.Launch();
    return new VaultInfo("","","","","");
} 
}

在我的脚本build.cake中,我有:

private static VaultInfo r = GetVaultInfo("user");

当我使用Cake.exe build.cake运行时,我得到了

Error: <path>/setup.cake(10,30): error CS0120: An object reference is required for the non-static field, method, or property 'GetVaultInfo(string)'

在蛋糕脚本中听起来有些明显不对,但......!

2 个答案:

答案 0 :(得分:2)

从您的字段中删除静态修改器。

而不是

private static VaultInfo r = GetVaultInfo("user");

将其更改为

private VaultInfo r = GetVaultInfo("user");

记住应用标准C#规则,在调用任何实例之前初始化静态变量。 (或者我相信)

答案 1 :(得分:0)

我从未使用过蛋糕,但我可以告诉你,你拥有的是无效的C#。您的方法设置为扩展方法,但您尝试从静态上下文中调用它。

将其更改为此应该可以正常工作,并且看起来你在方法中看起来并不像是在使用ICakeContext。

[CakeMethodAlias]
public static VaultInfo GetVaultInfo(string userName)
{
    Debugger.Launch();
    return new VaultInfo("","","","","");
}

如果您确实需要ICakeContext,则必须在ICakeContext类的实例上调用该方法。