【茶包射手日記】Visual Studio 專案項目 Icon 突變

同事報案,專案有個類別 .cs 的圖示怪怪的,一般 .cs 的圖示應是綠色的 C#,但問題類別卻是個沒見過的文件圖示(下圖黃框處),比對發現是該類別繼承 System.Net.WebClient 造成(註:這麼做是為了修改 WebClient 的 Timeout),隨便新增一個 ClassN.cs,只要繼承 WebClient 圖示馬上變掉,取消繼承就會恢復。

為了搞懂奇怪圖示的意義,我開始搜尋有沒有 Visual Studio Solution Explorer 圖示大全這種東西,爬文很久發現官方文件沒提供這種東西,最後是在 VS Image Library 找到線索,順便整理過程蒐集到的參考資料:

在 Visaul Studio 2015 圖示清單文件(PDF)中比對到這個奇怪圖示,它的名字叫 Component File:

由圖示知道跟 Component 有關,回頭查 Visual Studio 發現我繞了遠路,其實 .csproj 裡就有線索,當 .cs 繼承 WebClient ,該類別 .cs 會多出 <SubType>Component</SubType>:

  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="Class2.cs">
      <SubType>Component</SubType>
    </Compile>
    <Compile Include="Class3.cs" />

即便手動刪掉,開啟或修改該類別後會再自己長出來。更進一步,Visual Studio 還會為它加上特殊設計檢視:

由蒐集到的關鍵字爬文,在 Stackoverflow 找到完整解釋

會加上 <SubType>Component</SubType> 是因為 System.Net.WebClient 繼承了 System.ComponentModel.Component,修改圖示及套用特殊設計 UI 是 Visaul Studio 針對 System.ComponentModel.Component 所加入的邏輯。要避免可在類別加註 [System.ComponentModel.DesignerCategory("Code")]。

經實測,指定 DesignCategoryAttribute 即可恢復正常。

又學到冷知識。

歡迎推文分享:
Published 12 May 2018 09:38 AM 由 Jeffrey
Filed under:
Views: 2,707



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2018>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication