2013-04-26 5 views
9

Ich habe ein Stück Code wie folgt aus:Kann ich von WebClient erben, ohne dass mein Code eine "Design-Time-Komponente" ist?

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

Immer, wenn ich dies zu einer CS-Datei allerdings hinzufügen, Visual Studio 2012, in das unendliche Weisheit ist, wandelt meine C# Quelldatei zu einer „Entwurfszeit-Komponente“ . Wenn ich also jetzt auf die Datei doppelklicke, sehe ich, anstatt meinen C# -Code zu sehen, "Um Komponenten zu Ihrer Klasse hinzuzufügen, ziehen Sie sie aus der Toolbox und verwenden Sie das Eigenschaftenfenster, um ihre Eigenschaften festzulegen".

Ich weiß, ich kann mit der rechten Maustaste klicken und "Code anzeigen", aber das ist extrem ärgerlich.

Gibt es sowieso, Visual Studio zu zwingen, nicht anzunehmen, dass ich eine Komponente mache oder dass ich mich um ihren dummen visuellen Designer kümmere, der für meine Klasse keinen Zweck erfüllt?

+0

Vielleicht werfen Sie einen Blick auf die 'csproj' Datei XML. Stellen Sie sicher, dass es als '' Art des Eintrags markiert ist. EDIT: Vielleicht ist es als eine völlig andere Art von Datei markiert; Stellen Sie sicher, dass es kein " Designer" Kind-Tag darunter hat. –

Antwort

11

Das Problem ist, dass Visual Studio

<SubType>Component</SubType> 

in Ihrer CSPROJ Datei automatisch, sobald Sie von WebClient erben hinzufügen. Selbst wenn Sie versuchen, dies zu entfernen, fügt Visual Studio es beim erneuten Öffnen des Projekts erneut hinzu.

Eine Lösung besteht darin, Ihrer Klasse das folgende Attribut hinzuzufügen.

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

Dies funktioniert nicht in Visual Studio 2013. – Kyle

+0

In VS2013, habe ich die folgenden Tipps aus einem anderen Thread, und alles hat gut funktioniert: 1. Verwenden Sie die vollständige System.ComponentModel.DesignerCategory, verlassen Sie sich nicht auf eine Verwendung. 2. Bearbeiten Sie die .csproj-Datei und entfernen Sie die Komponente aus dem Kompilier-Tag für die Klasse (und um sicher zu sein, habe ich das Kompilier-Tag so modifiziert, dass es wie die anderen selbstschließend ist). Dies kann leicht versehentlich rückgängig gemacht werden, so dass Sie es möglicherweise mehr als einmal tun, wenn Sie Ihre Klasse ändern. – RobinHood70