12

次のようなコードがあります。

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

ただし、これを .cs ファイルに追加するたびに、Visual Studio 2012 は無限の知恵で、C# ソース ファイルを「デザイン タイム コンポーネント」に変換します。そのため、ファイルをダブルクリックすると、C# コードが表示される代わりに、「コンポーネントをクラスに追加するには、ツールボックスからコンポーネントをドラッグし、[プロパティ] ウィンドウを使用してプロパティを設定します」と表示されます。

右クリックして「コードを表示」できることは知っていますが、それは非常に面倒です。

私がコンポーネントを作成していると想定しないように Visual Studio を強制する方法はありますか? または、クラスの目的を果たさない愚かなビジュアル デザイナーを気にする必要はありますか?

4

2 に答える 2

15

問題は、Visual Studio が自動的に追加することです。

<SubType>Component</SubType> 

WebClient から継承するとすぐに .csproj ファイルに。これを削除しようとしても、プロジェクトを再度開くと、Visual Studio によって再度追加されます。

解決策は、次の属性をクラスに追加することです。

[System.ComponentModel.DesignerCategory("Code")]
于 2013-06-13T09:12:14.843 に答える
1

継承パスに System.ComponentModel.Component を持つクラスは、Visual Studio 内で自動的に "コンポーネント" として扱われます。

(残念ながら) WebClient の継承パスには System.ComponentModel.Component があります: http://msdn.microsoft.com/en-us/library/system.componentmodel.component(v=vs.110).aspx

于 2014-02-19T09:19:14.680 に答える