2015-10-14 51 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