指定資源的 C# 編譯器選項

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

  • Win32Resource / -win32res:指定 Win32 資源檔 (.res)。
  • Win32Icon / -win32icon:從指定的組件檔案或檔案參考中繼資料。
  • Win32Manifest / -win32manifest:指定 Win32 資訊清單檔 (.xml)。
  • NoWin32Manifest / -nowin32manifest:請勿包含預設的 Win32 資訊清單。
  • Resources / -resource:內嵌指定的資源 (簡短格式:/res)。
  • LinkResources / -linkresources:將指定的資源連結至此組件。

Win32Resource

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

<Win32Resource>filename</Win32Resource>

filename 是您想要新增至輸出檔案的資源檔。 Win32 資源可以包含版本或點陣圖 (圖示) 資訊,這項資訊可以協助您在 [檔案總管] 中識別應用程式。 如果您未指定此選項,編譯器會根據組件版本產生版本資訊。

Win32Icon

Win32Icon 選項會在輸出檔案內插入一個 .ico 檔,讓輸出檔案在檔案總管中具有所需的外觀。

<Win32Icon>filename</Win32Icon>

filename 是您想要新增至輸出檔案的 ..ico 檔案。 .ico 檔案可以使用 Resource Compiler (資源編譯器) 建立。 資源編譯器是在編譯 Visual C++ 程式時叫用,而 .ico 檔案則是從 .rc 檔案建立。

Win32Manifest

使用 Win32Manifest 選項,指定要內嵌到專案之可攜式執行檔 (PE) 中的使用者定義 Win32 應用程式資訊清單檔。

<Win32Manifest>filename</Win32Manifest>

filename 是自訂資訊清單檔的名稱和位置。 根據預設,C# 編譯器會內嵌應用程式資訊清單,以指定所要求的 "asInvoker" 執行層級。 這會在建置可執行檔的同一個資料夾中建立資訊清單。 如果您要提供自訂資訊清單,例如指定 "highestAvailable" 或 "requireAdministrator" 做為要求的執行層級,請使用此選項指定檔案名稱。

注意

此選項與 Win32Resources 選項互斥。 如果您嘗試在相同的命令列中使用這兩個選項,則會收到建置錯誤。

如果應用程式的應用程式資訊清單未指定要求的執行層級,則會受限於 Windows 中「使用者帳戶控制」功能下的檔案和登錄虛擬化。 如需詳細資訊,請參閱使用者帳戶控制

如果符合上述任一個條件,您的應用程式將會受限於虛擬化︰

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

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

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

NoWin32Manifest

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

<NoWin32Manifest />

使用此選項時,應用程式在 Windows Vista 上會虛擬化,除非您在 Win32 資源檔案中或於更新版本組建步驟期間提供應用程式資訊清單。

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

資源

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

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

filename 是您想要內嵌到輸出檔案的 .NET 資源檔。 identifier (選用) 是資源的邏輯名稱;用來載入資源的名稱。 預設值是檔案的名稱。 accessibility-modifier (選用) 資源的存取範圍:公用或私人。 預設值是公用。 根據預設,使用 C# 編譯器建立資源時,這些資源在組件中為公用狀態。 若要將資源設為私用,可將 private 指定為存取範圍修飾詞。 不允許 publicprivate 以外的其他存取範圍。 例如,如果 filename 是由 Resgen.exe 或是在開發環境中所建立的 .NET 資源檔,就可以使用 System.Resources 命名空間中的成員進行存取。 如需詳細資訊,請參閱System.Resources.ResourceManager。 對於其他所有資源,請使用 Assembly 類別中的 GetManifestResource 方法,以在執行階段存取資源。 輸出檔案中資源的順序是從專案檔中指定的順序決定。

LinkResources

在輸出檔案中建立 .NET 資源連結。 資源檔不會新增至輸出檔案。 LinkResourcesResource 選項不同;後者會將資源檔內嵌在輸出檔案中。

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

filename 是您要從組件連結的 .NET 資源檔。 identifier (選用) 是資源的邏輯名稱;用來載入資源的名稱。 預設值是檔案的名稱。 accessibility-modifier (選用) 資源的存取範圍:公用或私人。 預設值是公用。 根據預設,使用 C# 編譯器建立連結資源時,這些資源在組件中為公用狀態。 若要將資源設為私用,可將 private 指定為存取範圍修飾詞。 您只能使用 publicprivate 修飾詞。 例如,如果 filename 是由 Resgen.exe 或是在開發環境中所建立的 .NET 資源檔,就可以使用 System.Resources 命名空間中的成員進行存取。 如需詳細資訊,請參閱System.Resources.ResourceManager。 對於其他所有資源,請使用 Assembly 類別中的 GetManifestResource 方法,以在執行階段存取資源。 filename 中指定的檔案可以為任何格式。 例如,您可能需要產生組件的原生 DLL 部分,以便安裝到全域組件快取中,並從組件的 Managed 程式碼存取。 您可以在組件連結器中執行相同的動作。 如需詳細資訊,請參閱 Al.exe (組件連結器)使用組件和全域組件快取