2015-07-21 6 views
13

Ho appena installato la nuova versione Community di Visual Studio 2015 (RTM) e sto cercando di ottenere my open source project in VS2015 e C# 6.0.Visual Studio 2015/C# 6/Roslyn non è in grado di compilare commenti XML nel progetto PCL

Alcuni dei miei file .cs sono condivisi tra i progetti. In questo modo sono in grado di creare sia una versione PCL (con funzionalità limitate) sia una versione "completa" della libreria principale.

Per qualche motivo, tuttavia, alcuni file di codice vengono creati correttamente nel progetto completo, ma falliscono quando vengono creati nel progetto PCL (dove tutto viene compilato in C# 5 e Visual Studio 2013). Sembra che il compilatore non sia in grado di risolvere uno cref in un commento XML durante la creazione della versione PCL. Ecco un esempio di codice semplificato che non riesce sulla mia macchina:

/// <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) { } 
} 

L'errore di compilazione sto ottenendo è:

CS1580 tipo valido per il parametro Type in XML attributo commento cref: 'Y (tipo)' SimpleInjector.PCL

cosa strana è però che il supporto di IntelliSense nei commenti XML (Wow! abbiamo IntelliSense nei commenti XML ora!) funziona davvero, e il metodo Y(Type) è selezionabile t attraverso l'elenco a discesa. Ma dopo averlo selezionato, viene generato un errore di compilazione (solo in PCL).

La mia domanda ovviamente è come risolvere questo problema? È un problema comune? La configurazione del progetto potrebbe avere qualcosa a che fare con questo? È un bug noto?

risposta

6

David Kean, uno sviluppatore del team di lingue C#/VB, ha risposto abbastanza rapidamente su Twitter e ha fatto qualche ricerca su questo. Mi ha riferito che questo è in effetti un bug e una limitazione nota a Roslyn. Dopo le indagini, ha segnalato il problema su Github here e here.

Ci sono fondamentalmente due problemi qui che, insieme, mi ha causato a bloccarsi:

  1. di cref ai membri pubblico diventare ambiguo quando un membro interno è anche in ambito. Nel caso di Type, sembra esserci un tipo interno denominato Type, ma diverso dal pubblico System.Type. Sebbene questo tipo interno Type, non esiste per il mio codice, esiste per Roslyn e Roslyn si confonde.
  2. Il messaggio di errore non include i riferimenti completi in CS0419 per renderlo meno confuso. Poiché il messaggio di errore indica semplicemente "Tipo non valido per il parametro Tipo nell'attributo CREF del commento XML" è diventato difficile per me indovinare quale fosse il problema reale.

L'attuale lavoro intorno per questo problema è quello di qualificare completamente i tipi come questo:

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

Nota: Lo stesso vale per Assembly. Dovrai qualificarlo completamente come System.Reflection.Assembly.

Problemi correlati