【发布时间】:2015-09-22 04:44:01
【问题描述】:
我是 Roslyn 的新手,我正在尝试解析一个 cs 文件并获取函数和属性。
API 示例
//won't work any more
var tree = SyntaxTree.ParseText(...);
var tree = SyntaxTree.ParseFle(...);
var root = tree.Root;
API 似乎已经改变,它不再工作了。仅凭外观猜想它适用于 2012 Roslyn CTP。
然后我尝试更新的示例:
//won't work neither
var compilation = CSharpCompilation.Create("HelloWorld")
.AddReferences( new MetadataFileReference(
typeof(object).Assembly.Location)) .AddSyntaxTrees(tree);
var tree = CSharpSyntaxTree.ParseText(strSourceCode);
var root = tree.GetRoot();
同样,它不再起作用,因为MetadataFileReference 是我获得的 Roslyn 版本中的一个抽象类。 API又变了?我不确定。
VS 和包
我正在使用公司电脑上的 VS2013 PRO UPDATE 2。 2015 年 7 月 5 日至今。 不,我没有装有 VS2015 的电脑,我不确定这是否重要。
我打开一个新的 WinForm 项目,然后在 NuGet PM 中按照https://github.com/dotnet/roslyn 的指示安装了 Roslyn。这是我的安装日志:
PM> Install-Package Microsoft.CodeAnalysis -Pre
Attempting to resolve dependency 'Microsoft.CodeAnalysis.CSharp.Workspaces (= 1.0.0-rc3)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.CSharp (= 1.0.0-rc3)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.Common (= 1.0.0-rc3)'.
Attempting to resolve dependency 'System.Collections.Immutable (≥ 1.1.36)'.
Attempting to resolve dependency 'System.Reflection.Metadata (≥ 1.0.21)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.Analyzers (= 1.0.0-rc3)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.Workspaces.Common (= 1.0.0-rc3)'.
Attempting to resolve dependency 'Microsoft.Composition (≥ 1.0.27)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.VisualBasic.Workspaces (= 1.0.0-rc3)'.
Attempting to resolve dependency 'Microsoft.CodeAnalysis.VisualBasic (= 1.0.0-rc3)'.
Installing 'System.Collections.Immutable 1.1.36'.
You are downloading System.Collections.Immutable from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=329770. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'System.Collections.Immutable 1.1.36'.
Installing 'System.Reflection.Metadata 1.0.21'.
You are downloading System.Reflection.Metadata from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=329770. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'System.Reflection.Metadata 1.0.21'.
Installing 'Microsoft.CodeAnalysis.Analyzers 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.Analyzers from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.Analyzers 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis.Common 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.Common from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.Common 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis.CSharp 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.CSharp from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.CSharp 1.0.0-rc3'.
Installing 'Microsoft.Composition 1.0.27'.
You are downloading Microsoft.Composition from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=329770. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.Composition 1.0.27'.
Installing 'Microsoft.CodeAnalysis.Workspaces.Common 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.Workspaces.Common from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.Workspaces.Common 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis.CSharp.Workspaces 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.CSharp.Workspaces from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.CSharp.Workspaces 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis.VisualBasic 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.VisualBasic from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.VisualBasic 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis.VisualBasic.Workspaces 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis.VisualBasic.Workspaces from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis.VisualBasic.Workspaces 1.0.0-rc3'.
Installing 'Microsoft.CodeAnalysis 1.0.0-rc3'.
You are downloading Microsoft.CodeAnalysis from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=529443. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.CodeAnalysis 1.0.0-rc3'.
Adding 'System.Collections.Immutable 1.1.36' to MyWinForm.
Successfully added 'System.Collections.Immutable 1.1.36' to MyWinForm.
Adding 'System.Reflection.Metadata 1.0.21' to MyWinForm.
Successfully added 'System.Reflection.Metadata 1.0.21' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.Analyzers 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.Analyzers 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.Common 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.Common 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.CSharp 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.CSharp 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.Composition 1.0.27' to MyWinForm.
Successfully added 'Microsoft.Composition 1.0.27' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.Workspaces.Common 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.Workspaces.Common 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.CSharp.Workspaces 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.CSharp.Workspaces 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.VisualBasic 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.VisualBasic 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis.VisualBasic.Workspaces 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis.VisualBasic.Workspaces 1.0.0-rc3' to MyWinForm.
Adding 'Microsoft.CodeAnalysis 1.0.0-rc3' to MyWinForm.
Successfully added 'Microsoft.CodeAnalysis 1.0.0-rc3' to MyWinForm.
我的目标
我只是想:
- 将一个cs文件或一些源字符串读入编译器。
- 解析出类名和函数属性名。
- 解析出函数和属性及其参数和返回类型。
我可以提供一些工作示例吗?
【问题讨论】: