经过大量挖掘,我想我明白你为什么会遇到问题。
在其他项目类型中,资源文件会自动转换为具有称为资源键名称的静态方法的类。
没有办法真正自动执行此操作,因此我编写了一个 T4 模板来帮助您解决此问题。
<#@ template debug="false" hostspecific="True" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Xml" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
using Windows.ApplicationModel.Resources;
<#
var namespaceName = System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("NamespaceHint");
#>
namespace <#= namespaceName #>
{
public class ResourceHelper
{
private static readonly ResourceLoader resourceLoader = new ResourceLoader("Resources");
<# using (XmlReader reader = XmlReader.Create(Host.ResolvePath("Resources.resw")))
{
bool found=reader.ReadToFollowing("data");
while(found)
{
reader.MoveToFirstAttribute();
string name = reader.Value;
#>
public static string <#= name #>
{
get
{
return resourceLoader.GetString("<#= name #>");
}
}
<#
found=reader.ReadToFollowing("data");
}
}#>
}
}
如果您将模板放在与资源文件相同的文件夹中,它将输出一个名为 ResourceHelper.cs 的文件。然后可以在您的对象模型中使用它:-
[Required(ErrorMessageResourceName = "validation_string", ErrorMessageResourceType = typeof(ResourceHelper))]
请注意,有一些限制。首先,我不太擅长 T4 模板,因此代码可能会大大改进。现在你必须确保你给你的资源的名字会产生一个有效的方法名——不要在里面放空格!
其次,当您在资源文件中添加新的键/值时,模板不会自动生成,您必须进入模板并点击保存。
除此之外,它应该可以正常工作-希望对您有所帮助!