Asp.net mvc PublicResXFileCodeGenerator的T4模板
我想执行以下操作:在我的Web.config中添加一个开关,每当它打开时,来自.resx文件的任何值都将与它来自的.resx文件的名称一起出现。这主要用于调试目的 我目前的理解是,实现这一点的方法是创建一个自定义T4模板,并使用它而不是使用Asp.net mvc PublicResXFileCodeGenerator的T4模板,asp.net-mvc,visual-studio,t4,resx,Asp.net Mvc,Visual Studio,T4,Resx,我想执行以下操作:在我的Web.config中添加一个开关,每当它打开时,来自.resx文件的任何值都将与它来自的.resx文件的名称一起出现。这主要用于调试目的 我目前的理解是,实现这一点的方法是创建一个自定义T4模板,并使用它而不是使用PublicResXFileCodeGenerator 我正试图找到一个模板,它可以实现PublicResXFileCodeGenerator所做的功能,然后在此基础上进行构建。在我安装的Visual Studio中是否有这样的模板?如果没有,我可以从官方的在
PublicResXFileCodeGenerator
我正试图找到一个模板,它可以实现PublicResXFileCodeGenerator所做的功能,然后在此基础上进行构建。在我安装的Visual Studio中是否有这样的模板?如果没有,我可以从官方的在线资源中找到这样的模板吗?Visual Studio使用StronglyTypedResourceBuilder类将.resx文件转换为“硬编码”资源。这就是为什么我认为VisualStudio安装中没有类似的T4模板 您可能需要创建自己的T4模板。我没有适用于您的案例的现成模板,但我将这样开始并替换字符串资源的默认资源生成器:
<#
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);
<#
}
#>
elem.Attribute(“type”)==null)
{
#>
公共静态字符串{
得到{
返回ResourceManager.GetString(“”)
+((bool.Parse(ConfigurationManager.AppSettings[“DebugResources”]))
?“(MyResourceFile.resx)”
:String.Empty);
希望这个想法能有所帮助。也许我可以在某个时候提出一个完整的、可重用的.tt。谢谢Nico。我希望有办法进入设计器文件,用我从ResourceManager派生的CustomResourceManager替换所有System.Resources.ResourceManager。也许我可以运行一个脚本,我将包含在构建中。嗯,我同意e、 删除所有.designer.cs文件可能很耗时,可能会忘记删除一些文件。但对于生成过程,ResourceManager类位于哪个文件中并不重要。请查看此处:,这可能允许您实际替换设计器文件的内容。
<#
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);
<#
}
#>