GenerateResource 工作
在 .txt 和 .resx (XML 架構資源格式) 檔案,以及 Common Language Runtime 二進位 .resources 檔案 (可以內嵌在執行階段二進位可執行檔,或是編譯到附屬組件中) 之間轉換。這項工作通常用來將 .txt 或 .resx 檔轉換成 .resource 檔。GenerateResource 工作的功能類似於 resgen.exe。
參數
下表說明 GenerateResource 工作的參數。
參數 |
描述 |
---|---|
AdditionalInputs |
選擇性 ITaskItem[] 參數。 包含這項工作所執行相依性檢查的其他輸入。例如,專案檔和目標檔通常應做為輸入,以便在專案檔和目標檔更新時重新產生所有資源。 |
EnvironmentVariables |
選擇性 String[] 參數。 指定環境變數的名稱/值組陣列,這些名稱/值組應該伴隨 (或選擇性覆寫) 一般環境區塊,傳遞給繁衍的 resgen.exe。 |
ExcludedInputPaths |
選擇性 ITaskItem[] 參數。 指定項目陣列,這些項目指定要在最新檢查期間忽略之已追蹤輸入的路徑。 |
ExecuteAsTool |
選擇性 Boolean 參數。 如果為 true,則從適當目標 Framework 跨處理序執行 tlbimp.exe 和 aximp.exe,以產生必要的包裝函式組件。此參數允許多目標的 ResolveComReferences。 |
FilesWritten |
選擇性的 ITaskItem[] 輸出參數。 包含所有寫入磁碟的檔案名稱。這會包括快取檔 (若有的話)。這個參數對於 Clean 的實作相當有用。 |
MinimalRebuildFromTracking |
選擇性 Boolean 參數。 取得或設定參數,這個參數指定是否要使用追蹤式累加建置。如果為 true 則會開啟累加建置,否則會強制重新建置。 |
NeverLockTypeAssemblies |
選擇性 Boolean 參數。 指定所產生檔案 (例如 .resources 檔) 的名稱。如果沒有指定名稱,便會使用符合的輸入檔名稱,而且建立的 .resources 檔會置於含有輸入檔的目錄中。 |
OutputResources |
選擇性的 ITaskItem[] 輸出參數。 指定所產生檔案 (例如 .resources 檔) 的名稱。如果沒有指定名稱,便會使用符合的輸入檔名稱,而且建立的 .resources 檔會置於含有輸入檔的目錄中。 |
PublicClass |
選擇性 Boolean 參數。 如果為 true,則建立強型別 (Strongly Typed) 資源類別做為公用類別。 |
References |
選擇性 String[] 參數。 要從中載入 .resx 檔案中之型別的參考。Resx 檔案資料項目可能具有 .NET 型別。在讀取 .resx 檔時,就必須解析這個型別。通常使用標準的型別載入規則即可順利解析。如果 References 中有提供組件,則這些組件具有較高的優先順序。 強型別 (Strongly Typed) 資源不需要這個參數。 |
SdkToolsPath |
選擇性 String 參數。 指定 SDK 工具 (例如 resgen.exe) 的路徑。 |
Sources |
必要的 ITaskItem[] 參數。 指定要轉換的項目。傳入此參數的項目必須具有下列其中一種副檔名:
|
StateFile |
選擇性 ITaskItem 參數。 指定選擇性快取檔的路徑,其用途為加速 .resx 輸入檔中連結的相依性檢查。 |
StronglyTypedClassName |
選擇性 String 參數。 指定強型別資源類別的類別名稱。如果沒有指定此參數,則會使用資源檔的主檔名 (Base Name)。 |
StronglyTypedFilename |
選擇性 ITaskItem 參數。 指定原始程式檔的檔名。如果沒有指定此參數,則會使用類別的名稱做為基底檔名,副檔名則依據使用的語言而定。例如:MyClass.cs。 |
StronglyTypedLanguage |
選擇性 String 參數。 指定產生強型別資源的類別來源時,所使用的語言。這個參數必須完全符合 CodeDomProvider 所使用的其中一種語言。例如:VB 或 C#。 藉由傳遞值給這個參數,您可以指示工作產生強型別資源。 |
StronglyTypedManifestPrefix |
選擇性 String 參數。 指定強型別資源產生的類別來源中所使用的資源命名空間或資訊清單前置詞。 |
StronglyTypedNamespace |
選擇性 String 參數。 指定強型別資源產生的類別來源所使用的命名空間。如果沒有指定此參數,所有的強型別資源都會位於全域命名空間中。 |
TLogReadFiles |
選擇性 ITaskItem[] 唯讀參數。 取得項目陣列,這些項目表示讀取追蹤記錄檔。 |
TLogWriteFiles |
選擇性 ITaskItem[] 唯讀參數。 取得項目陣列,這些項目表示寫入追蹤記錄檔。 |
ToolArchitecture |
選擇性 [String] 參數。 用來判斷是否需要使用 Tracker.exe 繁衍 (Spawn) ResGen.exe。 應該可以剖析為 ExecutableType 列舉的成員。如果是 String.Empty,請使用啟發學習法來決定預設架構。應該可以剖析為 Microsoft.Build.Utilities.ExecutableType 列舉的成員。 |
TrackerFrameworkPath |
選擇性 [String] 參數。 指定包含 FileTracker.dll 的適當 .NET Framework 位置的路徑。 如果設定,使用者要負責確認其傳遞的 FileTracker.dll 位元符合預定要使用的 ResGen.exe 位元。如果未設定,工作會根據目前的 .NET Framework 版本決定適當位置。 |
TrackerLogDirectory |
選擇性 [String] 參數。 指定要放置因執行這項工作而產生之追蹤記錄檔的中繼目錄。 |
TrackerSdkPath |
選擇性 [String] 參數。 指定包含 Tracker.exe 的適當 Windows SDK 位置的路徑。 如果設定,使用者要負責確認其傳遞的 Tracker.exe 位元符合預定要使用的 ResGen.exe 位元。如果未設定,工作會根據目前的 Windows SDK 決定適當位置。 |
TrackFileAccess |
選擇性 [Boolean] 參數。 如果為 true,則會使用輸入檔案的目錄來解析相對檔案路徑。 |
UseSourcePath |
選擇性 Boolean 參數。 如果為 true,則指定使用輸入檔的目錄來解析相對檔案路徑。 |
備註
由於 .resx 檔可能含有其他資源檔的連結,如果只是比較 .resx 和 .resource 檔案時間戳記以查看輸出是否是最新的,這樣還不夠。反之,GenerateResource 工作會追溯 .resx 檔中的連結,並檢查連結檔案的時間戳記。這表示您在含有 GenerateResource 工作的目標上,不應該只使用 Inputs 和 Outputs 屬性 (Attribute),因為這可能會造成略過原本應該執行的工作。
除了以上列出的參數之外,此項工作還會繼承 TaskExtension 類別中的參數,而該類別本身又繼承 Task 類別。如需這些錯誤碼的清單及其說明,請參閱 TaskExtension 基底類別。
當使用 MSBuild 4.0 處理以 .NET 3.5 為目標的專案時,可能會因為 x86 資源而建置失敗。若要決此問題,您可以將目標建置成 AnyCPU 組件。
範例
下列範例使用 GenerateResource 工作,從 Resx 項目集合所指定的檔案中產生 .resources 檔。
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
GenerateResource 工作會使用 < EmbeddedResource > 項目的 < LogicalName > 中繼資料來命名內嵌在組件中的資源。
假設組件名稱為 myAssembly,下列程式碼會產生名為 someQualifier.someResource.resources 的內嵌資源:
<ItemGroup> <EmbeddedResource Include="myResource.resx"> <LogicalName>someQualifier.someResource.resources</LogicalName> </EmbeddedResource></ItemGroup>
若沒有 < LogicalName >中繼資料,資源會被命名為 myAssembly.myResource.resources。本範例僅適用於 Visual Basic 和 Visual C# 組建程序。