NRefactory は C# からの WinRT 言語プロジェクションを理解しますか? そうでない場合、この機能を NRefactory に追加する最も簡単な方法は何でしょうか?
次の単体テストは、現在サポートされていないことを示しているようです。解決Windows.Globalization.ApplicationLanguages.Languages[0]
すると System.String に解決されるはずですが、これは失敗します。私の理論では、リゾルバーはインデクサーを見つけることを期待していますが、実際にはのプロジェクトであるため、インデクサーはありませんIVector.GetAt(...)
。
この問題を再現するには、NRefactory のクローンを作成し、次のファイルを追加しますICSharpCode.NRefactory.Tests\CSharp\Resolver\WinrtTests.cs
。
using ICSharpCode.NRefactory.TypeSystem;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Resolver
{
public class WinrtTests : ResolverTestBase
{
public override void SetUp()
{
var loader = new CecilLoader();
project = new CSharpProjectContent().AddAssemblyReferences(new [] {
CecilLoaderTests.Mscorlib,
loader.LoadAssemblyFile(@"C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd")
});
compilation = project.CreateCompilation();
}
[Test]
public void FixedStatement()
{
const string program =
@"class TestClass
{
static void Main()
{
var i = $Windows.Globalization.ApplicationLanguages.Languages[0]$;
}
}";
var rr = Resolve(program);
Assert.AreEqual("System.String", rr.Type.FullName);
}
}
}