小编Tim*_*sky的帖子

错误:引用类型声明已定义,但无法找到

我有3个项目的解决方案:

  • ParsersBase,定义接口IParseRule
  • ParsersLibrary,它引用了ParsersBase并定义了一个类HtmlImageUrlParseRule:IParseRule
  • ParsersLibraryTest,引用ParsersBase和ParsersLibrary并使用一些测试方法定义测试类

当我试图建立它时,我收到一个警告:

引用类型'AVSoft.ParsersBase.IParseRule'声称它在'c:\ Users\Tim\Dropbox\projects\Image Downloader\ParsersLibrary\bin\Debug\ParsersLibrary.dll'中定义,但无法找到

为什么VS试图AVSoft.ParsersBase.IParseRule在ParsersLibrary.dll中找到?ParsersLibraryTest引用了ParsersBase,它没有任何意义.

c# assemblies visual-studio

41
推荐指数
6
解决办法
5万
查看次数

TypeScript编译器API在转换过程中丢失格式

我必须以特定的方式修改大约1000个打字稿文件:为了我的应用程序的国际化,我需要将全部StringLiteralJsxText令牌替换CallExpression为翻译功能。

我已经使用Roslyn在我们的C#代码库中完成了这样的任务,因此现在我正在尝试使用Typescript编译器API完成类似的任务。它与Roslyn API十分相似,但是它们之间有一个讨厌的区别。在Roslyn中,您有Trivia令牌的概念:这种令牌不会发出任何有趣的东西,但对于可读性而言是必不可少的。这些是空格,制表符,注释等。在Roslyn语法树中,您具有源文件中的所有琐事。当您以某种方式更改C#语法树并从该语法树发出源代码时,您将拥有所有相同的格式,注释,空格以及所有这些东西。

不幸的是,打字稿AST中没有任何琐事标记,因此当我使用这样的代码时,所有格式都会消失。

const result: ts.TransformationResult<ts.SourceFile> = ts.transform(
  sourceFile, [ transformerFactory(visitorFunction) ]
);

const transformedSourceFile: ts.SourceFile = result.transformed[0];

const printer: ts.Printer = ts.createPrinter();

const generated: string = printer.printNode( ts.EmitHint.SourceFile, transformedSourceFile, sourceFile);
Run Code Online (Sandbox Code Playgroud)

我有什么选择?

  1. 我可以坚持使用上述方法,但这会导致许多无用的编辑,损坏的github历史记录和巨大的请求。使用这种方法时,我应该在转换后一定使用Prettier,并且可能应该将其安装为开发人员的依赖项,并在我们的CI中安装它,这样以后我们就不会再遇到此类问题了。
  2. 我仍然可以使用AST来检测我的令牌,但是可以在没有ts.Printer和的情况下进行转换ts.Transformation。我可以让所有文字在检测阶段进行处理,按照它们在文件中的降序排列,并使用substring或类似的方法替换它们。这是一件非常棘手的事情,我真的不想这样做,但是我对第一种选择的弊端不满意。

所以我该怎么做?我还有其他选择吗?

compiler-construction abstract-syntax-tree automated-refactoring typescript

6
推荐指数
1
解决办法
205
查看次数