dart - Dart AST 库在编译时失败
问题描述
我正在构建一个使用Dart 的 AST 库的程序,只要我使用 Dart 解释器运行程序(dart filename.dart
),它就可以正常工作。
一旦我想编译程序(dart compile filename.dart
),程序就无法加载文件,我有这个堆栈跟踪:
#0 _PhysicalFile.readAsStringSync (package:analyzer/file_system/physical_file_system.dart:184)
#1 FolderBasedDartSdk.languageVersion (package:analyzer/src/dart/sdk/sdk.dart:400)
#2 FeatureSetProvider.build (package:analyzer/src/dart/analysis/feature_set_provider.dart:143)
#3 AnalysisDriver._createFileTracker (package:analyzer/src/dart/analysis/driver.dart:1500)
#4 new AnalysisDriver (package:analyzer/src/dart/analysis/driver.dart:291)
#5 ContextBuilder.buildDriver (package:analyzer/src/context/builder.dart:119)
#6 ContextBuilderImpl.createContext (package:analyzer/src/dart/analysis/context_builder.dart:94)
#7 new AnalysisContextCollectionImpl (package:analyzer/src/dart/analysis/analysis_context_collection.dart:55)
#8 _createAnalysisContext (package:analyzer/dart/analysis/utilities.dart:125)
#9 resolveFile (package:analyzer/dart/analysis/utilities.dart:115)
#10 main (package:DartProjects/dartprojects.dart:122)
#11 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299)
#12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168)
我查看了源代码以查看错误可能出在哪里,似乎package:analyzer/src/dart/sdk/sdk.dart
它试图获取语言版本文件,但不是使用 PATH 来知道我的 dart sdk 在哪里,而是尝试在其中找到它我的 InteliJ 文件夹,失败了。另外,我尝试在新创建的 VM 上运行它,但它也失败了。
这是产生此输出的代码:
import 'dart:io';
import 'package:analyzer/dart/analysis/utilities.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
void main(List<String> arguments) async {
final fileName = Directory.current.path + r'\test.dart';
var source = null;
try {
source = await resolveFile(path: fileName);
} catch (e, s) {
print('${s}');
return;
}
}
谢谢你的帮助。
解决方案
不是一个好的解决方法。
将 Dart SDK 文件夹中的“版本”文件复制到项目的根目录。
分析仪将接受并使用它。
如果您的编译文件位于“bin”文件夹中,这将起作用。
这不是一个好的解决方法。
PS
这被称为黑客。
推荐阅读
- javascript - Javascript Canvas 仅将图像绘制到缓冲区
- pandas - 如果返回值不为空,如何使用包含 vlookup 更新熊猫?
- python - Kivy,带有可选标签和多列的 RecycleView
- python - Geopandas:无法更改 geopandas 对象的 crs
- typescript - 为什么 TypeScript 仍然认为我的变量赋值可能为 null
- c# - 我应该如何在 .net core 3.0 中绑定来自 WPF 的 xaml 事件?
- java - 为什么我们不能在 java 的 printf 中使用整数精度?只是好奇
- angular - NGXS:我们如何将整个集合传递给 ngxs 中的操作?
- python - 如何从列表中获取非常特殊的元素?
- python - 无法使用 python 访问 mysql db(都在不同的容器上运行)