2015-07-21 13 views
13

Właśnie zainstalowałem świeżo wydaną wersję Community Edition Visual Studio 2015 (RTM) i próbuję uzyskać my open source project działającą pod VS2015 i C# 6.0.Visual Studio 2015/C# 6/Roslyn nie może skompilować komentarzy XML w projekcie PCL

Niektóre z moich plików .cs są udostępniane dla projektów. W ten sposób mogę zbudować zarówno wersję PCL (z ograniczoną funkcjonalnością), jak i "pełną" wersję głównej biblioteki.

Z jakiegoś powodu jednak niektóre pliki kodu budują się prawidłowo w pełnym projekcie, ale nie działają, gdy są zbudowane w projekcie PCL (gdzie wszystko kompiluje się pod C# 5 i Visual Studio 2013). Wydaje się, że kompilator nie może rozwiązać cref w komentarzu XML podczas budowania wersji PCL. Oto uproszczony przykład kodu, który nie działa na moim komputerze:

/// <summary></summary> 
public class A 
{ 
    // Compile error on next line: 
    /// <summary><see cref="Y(Type)"/>.</summary> 
    public void X() { } 

    /// <summary></summary> 
    /// <param name="x"></param> 
    public void Y(Type x) { } 

    /// <summary></summary> 
    /// <param name="i"></param> 
    public void Y(int i) { } 
} 

Błąd kompilacji dostaję to:

CS1580 Nieprawidłowy typ na typ parametru w XML atrybutu komentarz cref: „Y (Type)”SimpleInjector.PCL

Dziwne jest jednak, że wsparcie IntelliSense w komentarzach XML (Wow! mamy IntelliSense w komentarzach XML teraz!) rzeczywiście działa, a metoda jest wybierana t Y(Type) z rozwijanej listy. Ale po wybraniu tego, generowany jest błąd kompilacji (tylko w PCL).

Moje pytanie jest oczywiście, jak to naprawić? Czy jest to powszechny problem? Czy konfiguracja projektu może mieć coś wspólnego z tym? Czy to znany błąd?

Odpowiedz

6

David Kean, deweloper w zespole języków C#/VB, zareagował dość szybko na Twitterze i przeprowadził pewne badania na ten temat. Opowiedział mi, że jest to w rzeczywistości błąd i znane ograniczenie w Roslyn. Po badaniu zgłosił problem na Github here i here.

Istnieją zasadniczo dwa problemy, które tu razem sprawiało mi utknąć:

  1. cref do członków publicznych stają się dwuznaczne, gdy człon wewnętrzny jest również zakres. W przypadku Type wydaje się, że istnieje typ wewnętrzny o nazwie Type, ale inny niż publiczny System.Type. Chociaż ten wewnętrzny typ Type nie istnieje dla mojego kodu, istnieje on dla Roslyn, a Roslyn jest zdezorientowany.
  2. Komunikat o błędzie nie zawiera pełnych referencji w CS0419, aby był mniej kłopotliwy. Ponieważ komunikat o błędzie po prostu stwierdza "Niepoprawny typ dla parametru Typ w atrybucie kreacji komentarza XML", trudno było mi zgadnąć, jaki był faktyczny problem.

Obecna praca wokół tego problemu jest w pełni zakwalifikować typy tak:

/// <summary><see cref="Y(System.Type)"/>.</summary> 
public void X() { } 

Uwaga: To samo dotyczy Assembly. Będziesz musiał w pełni zakwalifikować ten typ jako System.Reflection.Assembly.

Powiązane problemy