2015-09-04 76 views
1

上下文:我們當前正在使用一種解決方案,其中所有可本地化的字符串位於已翻譯的XAML文件中。對於代碼轉換的字符串,我們使用的是從相關的資源字典檢索時的功能:Roslyn:從代碼分析器訪問部分類的XAML

MessageBox.Show(this.i18n("my message")); 

我想實現代碼分析器將檢查「我的信息」串實際上是在相關的XAML文件中聲明。問題在於,我無法在編譯上下文中找到任何會將我引導至正確的XAML文件的內容。

如果資源管理超出Roslyn範圍,我可以使用DTE Interface來完成我的任務,但我想知道是否有更好的解決方案。

+0

Roslyn只關於C#代碼。您需要直接使用VS API,並且您需要了解如何在XAML更改時重新掃描。 – SLaks

+0

@SLaks:我們提供了一種指定文件的方式(如本例中的XAML文件),您需要分析器中的內容。是的,我們不幫你解釋它們的內容,但我認爲羅伯特在這裏首先要問的是如何獲得內容。 –

回答

2

Roslyn公開了一個AdditionalFiles機制,您可以在其中指定一些附加文件傳遞到您的分析器,您需要的內容是。你正在做的XAML文件將是一個完美的例子。我們有one Roslyn analyzer that we run on Roslyn itself,它驗證我們在API中的類型是否與一個附加文件(稱爲PublicAPI.Shipped.txt)匹配。如果你將它看作一個樣本,它會告訴你如何讀取額外的文件。

這不會給你任何解釋文件的幫助(你需要自己解析它們),但是這至少爲你提供了獲取它們內容的機制。我們將負責所有關於從磁盤讀取文件以及爲您準備的所有內容。

您仍然必須指定您確實希望文件首先包含在AdditionalFiles列表中。如果你look here你可以看到你可以指定一個MSBuild項目組名稱,將通過一切。

+0

如何重新運行XAML更改的分析器? – SLaks

+0

謝謝!似乎正是我需要的。 SLaks,它似乎像每次編譯該程序時加載文件,這對我來說是完美的。 –

+0

AdditionalFiles是否意味着分析器部件或被分析的部件中有額外的文件。我需要分析儀附帶的外部數據,但不需要分析目標。 –