C# 編譯器選項指定資源

下列選項可控制 C# 編譯器如何建立或匯入 Win32 資源。 新的 MSBuild 語法會以「粗體」顯示。 較舊的 csc.exe 語法會以code style顯示。

  • Win32Resource / -win32res:指定 Win32 資源檔 (.res)。
  • Win32Icon / -win32icon:從指定的組件檔案或檔案參考中繼資料。
  • Win32Manifest / -win32manifest:指定 Win32 資訊清單檔 (.xml)。
  • NoWin32Manifest / -nowin32manifest:請勿包含預設的 Win32 資訊清單。
  • EmbeddedResource / -resource:嵌入指定的資源(簡稱:/res)。
  • LinkResource / -linkresource:將指定的資源連結到這個組裝體。

注意

欲了解更多關於為您的專案配置這些選項的資訊,請參閱 編譯器選項

Win32Resource

Win32Resource 選項會將 Win32 資源插入至輸出檔案中。

<Win32Resource>filename</Win32Resource>

filename 是您想要新增至輸出檔案的資源檔。 Win32 資源可以包含版本或點陣圖(圖示)資訊,幫助在檔案總管中辨識你的應用程式。 如果你沒指定這個選項,編譯器會根據組合語言版本產生版本資訊。

Win32Icon

Win32Icon 選項會在輸出檔案中插入一個 .ico 檔案,讓輸出檔案在檔案總管中呈現理想的外觀。

<Win32Icon>filename</Win32Icon>

filename 是您想要新增至輸出檔案的 ..ico 檔案。 你可以使用資源編譯器建立.ico檔案。 當你編譯 Visual C++ 程式時,會被呼叫資源編譯器。 .ico 檔案會由 .rc 檔案建立。

Win32Manifest

使用 Win32Manifest 選項指定一個由使用者定義的 Win32 應用程式清單檔案,嵌入專案的可攜式執行檔(PE)中。

<Win32Manifest>filename</Win32Manifest>

filename 是自訂資訊清單檔的名稱和位置。 預設情況下,C# 編譯器會嵌入一個應用程式清單,指定一個請求的執行層級。asInvoker 它會在建立執行檔的同一個資料夾裡建立清單。 如果你想提供自訂清單,例如指定請求的執行層級 highestAvailablerequireAdministrator,請使用此選項指定檔案名稱。

注意

Win32Manifest 選項和 Win32Resource 選項是互斥的。 如果你嘗試在同一個指令列同時使用兩個選項,會收到建置錯誤。

若應用程式清單未指定執行層級,則可依據 Windows 的使用者帳戶控制功能進行檔案與登錄虛擬化。 如需詳細資訊,請參閱使用者帳戶控制

若符合以下任一條件,您的申請將面臨虛擬化:

  • 您可以使用 NoWin32Manifest 選項,而且未提供後面建置步驟中的資訊清單,或未使用 Win32Resource 選項將資訊清單做為 Windows 資源 (.res) 檔案的一部分。
  • 您可以提供未指定所要求執行層級的自訂資訊清單。

Visual Studio 會建立預設 .manifest 檔案,並將它與可執行檔一起儲存在偵錯和發行目錄中。 您可以在任何文字編輯器中建立自訂資訊清單,然後將檔案新增至專案,來新增自訂資訊清單。 或者,您可以使用滑鼠右鍵按一下方案總管中的 [專案] 圖示,並選取 [新增項目],然後選取 [應用程式資訊清單檔]。 新增或現有清單檔案後,它會出現在 清單 下拉選單中。 如需詳細資訊,請參閱專案設計工具、應用程式頁面 (C#)

您可以使用 NoWin32Manifest 選項,提供應用程式資訊清單做為自訂建置後步驟或 Win32 資源檔的一部分。 如果您想要應用程式受制於 Windows Vista 上的檔案或登錄虛擬化,請使用這個相同的選項。

NoWin32Manifest

使用 NoWin32Manifest 選項指示編譯器不要將任何應用程式資訊清單內嵌在可執行檔中。

<NoWin32Manifest />

使用此選項時,該應用程式在 Windows Vista 上會被虛擬化,除非你在 Win32 資源檔案中提供應用程式清單,或在後續建置階段提供。

在 Visual Studio 中,選取 [資訊清單] 下拉式清單的 [建立無資訊清單應用程式] 選項,在 [Application Property] (應用程式屬性) 頁面中設定這個選項。 如需詳細資訊,請參閱專案設計工具、應用程式頁面 (C#)

EmbeddedResource

將指定的資源內嵌到輸出檔。

<EmbeddedResource Include="filename">
  <LogicalName>identifier</LogicalName>
  <Access>accessibility-modifier</Access>
</EmbeddedResource>

filename 是您想要內嵌到輸出檔案的 .NET 資源檔。 identifier (可選)是資源的邏輯名稱:你用來載入資源的名稱。 預設值是檔案的名稱。 accessibility-modifier (選用) 資源的存取範圍:公用或私人。 預設值是公用。 預設情況下,當你用 C# 編譯器建立資源時,組合語言中資源是公開的。 若要將資源設為私用,可將 private 指定為存取範圍修飾詞。 不允許其他無障礙設施。 如果 filename 是.NET資源檔案,例如由 Resgen.exe 或在開發環境中建立,你可以透過 System.Resources 命名空間中的成員來存取它。 如需詳細資訊,請參閱System.Resources.ResourceManager。 對於其他所有資源,請使用 GetManifestResource 類別中的 Assembly 方法,以在執行階段存取資源。 輸出檔案中資源的順序來自專案檔案中指定的順序。

連結資源

在輸出檔案中建立 .NET 資源連結。 資源檔不會新增至輸出檔案。 LinkResourceEmbeddedResource 選項不同,後者會在輸出檔中嵌入資源檔案。

<LinkResource Include="filename">
  <LogicalName>identifier</LogicalName>
  <Access>accessibility-modifier</Access>
</LinkResource>

filename 是您要從組件連結的 .NET 資源檔。 identifier (可選)是資源的邏輯名稱:你用來載入資源的名稱。 預設值是檔案的名稱。 accessibility-modifier (選用) 資源的存取範圍:公用或私人。 預設值是公用。 預設情況下,當你用 C# 編譯器建立連結資源時,組合語中會是公開的。 若要將資源設為私用,可將 private 指定為存取範圍修飾詞。 不允許使用其他修飾。 如果 filename 是.NET資源檔案,例如由 Resgen.exe 或在開發環境中建立,你可以透過 System.Resources 命名空間中的成員來存取它。 如需詳細資訊,請參閱System.Resources.ResourceManager。 對於其他所有資源,請使用 GetManifestResource 類別中的 Assembly 方法,以在執行階段存取資源。 filename 中指定的檔案可以為任何格式。 舉例來說,你可能想做一個原生的 DLL 組件,這樣它就能安裝到全域組合快取中,並從組合語言中的管理程式碼存取。 您可以在組件連結器中執行相同的動作。 如需詳細資訊,請參閱 Al.exe (組件連結器)使用組件和全域組件快取