簡體   English   中英

PublicResXFileCodeGenerator的T4模板

[英]T4 template for PublicResXFileCodeGenerator

我想要執行以下操作:在我的Web.config中添加一個開關,每當打開它時,來自.resx文件的任何值都將與它來自的.resx文件的名稱一起出現。 這主要用於調試目的。

我目前的理解是,這樣做的方法是創建一個自定義T4模板,並使用它而不是PublicResXFileCodeGenerator

我試圖找到一個模板來執行PublicResXFileCodeGenerator所做的事情,然后在此基礎上構建。 我的Visual Studio安裝中是否有這樣的模板? 如果沒有,我可以在線找到官方來源的模板嗎?

Visual Studio使用StronglyTypedResourceBuilder類將.resx文件轉換為“硬編碼”資源。 這就是為什么我認為在Visual Studio安裝中某處沒有類似的T4模板。

您可能想要創建自己的T4模板。 我沒有針對您的案例的現成模板,但這是我將如何開始並替換字符串資源的默認資源構建器:

  1. 從資源文件的Property Grid中的CustomTool-Property中刪除“ResXFileCodeGenerator”。
  2. 刪除現有的.Designer.cs文件
  3. 將一個“DebugResources”設置添加到web.config
  4. 打開T4模板中的.resx文件作為XDocument(.resx是xml格式)

     <#@ assembly name="System.Xml" #> <#@ assembly name="System.Xml.Linq #> <#@ import namespace="System.Xml.Linq #> <# string inputFile = System.IO.Path.GetDirectoryName(this.Host.TemplateFile) + @"\\MyResourceFile.resx"; XDocument resDoc = XDocument.Load(inputFile); #> 
  5. 迭代.resx文件中的所有元素並生成資源的屬性。 根據web.config中的設置,將資源文件名添加到返回值。

     <# foreach(var dataElement in resDoc.Descendants("data") .Where(elem => elem.Attribute("type") == null) { #> public static string <#= dataElement.Attribute("name").Value #> { get { return ResourceManager.GetString("<#= dataElement.Attribute("name").Value #>") + ((bool.Parse(ConfigurationManager.AppSettings["DebugResources"])) ? " (MyResourceFile.resx)" : String.Empty); <# } #> 
  6. 生成資源類的其余部分:資源管理器(您可以從原始Designer.cs文件中復制該資源管理器)並檢查如何處理圖像和其他資源類型。

希望這個想法有所幫助 也許我可以在某個時候想出一個完整且可重復使用的.tt。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM