2015-10-14 53 views
1

安装.NET Compiler Platform SDK时,您将获得Visual Studio模板,以创建“代码修正分析器(NuGet + VSIX)”和“代码重构(VSIX)”。将Roslyn代码重构为NuGet包

为什么没有用于发送NuGet代码重构的模板(如“代码重构(NuGet + VSIX)”)?
甚至可以从NuGet包中添加代码重构提供者(通过手动创建NuGet包)?
在每个项目基础上为项目安装代码重构提供程序是否合理?

编辑: 我的用例是一个代码重构,从无类型数据(如JSON)中生成一个C#类型。这基本上是F#类型的提供者(尽管它们当然更强大)。这意味着,用户创建像下面

[JsonProvider("http://example.com/data.json")] 
public class ExampleData 
{ 
} 

一类和重构与来自它从URL提取的属性的采样数据属性填充它:

[JsonProvider("http://example.com/data.json")] 
public class ExampleData 
{ 
    public string Property1 { get; private set; } 
    public int Property2 { get; private set; } 

    public void Load(Uri uri) { ... } 
    public void FromData(string data) { ... } 
    ... 
} 

原因我不不想创建分析器是因为用户应该能够决定何时更新C#类型。因为我不知道URL指向的数据何时发生变化。而且我不想用一条她无法摆脱的曲线来惹恼用户。

+0

你可以扩展你的例子吗?你确定这个只应用于某些项目的重构实际上并不是变相的分析器/代码修正吗? –

+0

@Damien_The_Unbeliever thx,我更新了我的问题。 –

回答

3

目前不支持通过NuGet分发重构,但是我们希望在将来添加。

+0

我明白了,谢谢。有没有技术上的困难?分析器和代码重构看起来非常相似。 –

+2

@JohannesEgger:重构作为MEF导出被加载到IDE中,并且MEF不允许您在打开和关闭项目时动态更改组合图(这就是为什么在安装扩展后必须重新启动VS的原因)。 – SLaks

+2

相比之下,分析器通过内置于Roslyn本身的特殊定位系统进行加载,特别是为了避免此问题(并且还因为它们由核心编译器使用,而不是基于MEF构建) – SLaks