2013-04-26 7 views
9

Ho un pezzo di codice come questo:È possibile ereditare da WebClient senza che il mio codice sia un "componente del tempo di progettazione"?

public class NoFollowWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = (HttpWebRequest)base.GetWebRequest(address); 
     request.AllowAutoRedirect = false; 
     return request; 
    } 
} 

Ogni volta che aggiungi a un file con estensione cs, però, Visual Studio 2012, nella sua infinita saggezza, converte il mio file # sorgente C ad una "componente fase di progettazione" . Così, quando ho fare doppio clic sul file ora, invece di vedere il mio codice C#, che vedo "Per aggiungere componenti alla classe, trascinarli dalla Casella degli strumenti e utilizzare la finestra delle proprietà per impostare le loro proprietà".

so che posso fare clic destro e fare "codice di vista", ma questo è estremamente fastidioso.

Esiste un modo per forzare Visual Studio per non dare per scontato che sto facendo un componente o che ho a cuore il loro visual designer stupido che non serve a nulla per la mia classe?

+0

Forse date un'occhiata al file XML 'csproj'. Assicurati che sia contrassegnato come '' tipo di voce. EDIT: Forse è contrassegnato come un tipo completamente diverso di file; assicurarsi che non dispone di un ' Designer' tag bambino al di sotto di esso. –

risposta

11

Il problema è che Visual Studio aggiungerà automaticamente

<SubType>Component</SubType> 

nel file Csproj non appena si eredita dalla WebClient. Anche se si tenta di rimuovere questo, Visual Studio lo aggiunge nuovamente quando si riapre il progetto.

Una soluzione è quella di aggiungere il seguente attributo alla classe.

[System.ComponentModel.DesignerCategory("Code")] 
+1

Questo non funziona in Visual Studio 2013. – Kyle

+0

In VS2013, ho utilizzato i seguenti suggerimenti da un altro thread, e tutto ha funzionato bene: 1. Utilizzare l'intero System.ComponentModel.DesignerCategory, non fare affidamento su un utilizzo. 2. Modificare il file .csproj e rimuovere il componente dal tag Compile per la classe (e per essere sicuro, ho modificato il tag di compilazione per essere a chiusura automatica, come gli altri). Questo è facilmente annullato per sbaglio, quindi potresti trovarti a farlo più di una volta se modifichi la tua classe. – RobinHood70