我遇到了一个奇怪的错误。
这是回顾。
我有一个util
课程,可以将我所有的好东西都存储在一个应用程序中(对于我来说,在一个课程中存储不相关的东西,代码礼仪等等,对我来说不是太明亮),它看起来像这样:
public static class util
{
public static IWebDriver driver = new PhantomJSDriver();
public static string spreadsheetId = "I won't show you my pantsu, senpai!";
//more definitions and some methods here....
}
我的主要方法几乎是Google快速入门应用的直接副本,如下所示:
static string[] Scopes = { SheetsService.Scope.Spreadsheets };
static string ApplicationName = "I";
static void Main(string[] args)
{
UserCredential credential;
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Create Google Sheets API service.
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
string spreadsheetId = util.spreadsheetId;
//BELOW IS STUFF THAT DOESN'T GET EXECUTED DUE TO EXCEPTION, READ ON!
}
原来如此!实际上 - 从技术上来说效果很好。但是,由于某些与测试相关的内容,我需要将util.driver
切换为new FirefoxDriver()
。并猜测,当我这样做时,System.TypeInitializationException
行抛出异常string spreadsheetId = util.spreadsheetId;
“.util类型的初始化器返回异常”。
这怎么可能呢?
此外,firefoxdriver所需的geckodriver存在于文件夹中,但控制台确实尖叫很多“远程主机返回错误:404未找到”,不知道那是什么 - PhantomJS不会发生。
答案 0 :(得分:1)
System.TypeInitializationException
是一个异常,它作为类初始化程序抛出的异常的包装引发。这个类不能被继承。当类初始化程序无法初始化类型时,会创建TypeInitializationException并传递对类型的类初始值设定项引发的异常的引用。如此SO post中所述,请检查您的静态参数。最常见的情况是,当static constructor无法实例化类型时,会引发TypeInitializationException异常。