在我的C#应用程序,我需要创建定制的为每一位客户的字符串的.resx文件。
我想要做的就是避免每次我必须提供我的应用我的客户的时间重新编译整个项目,所以我需要这个字符串动态访问。 那么,如何可以访问(在应用程序执行)的RESX文件,如果我kwow只对执行时间的文件名?
因为现在我写类似的东西:
Properties.Resources.MyString1
其中,资源是我的Resource.resx文件。 但我需要的东西是这样的:
GetStringFromDynamicResourceFile("MyFile.resx", "MyString1");
可能吗?
感谢马克
请问像这样帮助你的情况?
Dictionary<string, string> resourceMap = new Dictionary<string, string>();
public static void Func(string fileName)
{
ResXResourceReader rsxr = new ResXResourceReader(fileName);
foreach (DictionaryEntry d in rsxr)
{
resourceMap.Add(d.Key.ToString(),d.Value.ToString());
}
rsxr.Close();
}
public string GetResource(string resourceId)
{
return resourceMap[resourceId];
}
你可以把所需要的资源投入到一个单独的DLL(每个客户),然后提取动态使用反射的资源:
Assembly ass = Assembly.LoadFromFile("customer1.dll");
string s = ass.GetManifestResource("string1");
我可能有语法错误 - 这是早期的。 一个潜在的警告在这里:通过反射访问DLL将锁定DLL文件的时间长度,可以从更新或替换在客户端机器上的DLL阻止你。
当然,这是可能的。 你需要了解ResouceSet在MSDN类。 如果您想直接加载.resx文件,你可以使用ResxResourceSet 。
使用LINQ到SQL ,而不是引用System.Windows.Forms.ResXResourceReader在您的项目类。
public string GetStringFromDynamicResourceFile(string resxFileName, string resource)
{
return XDocument
.Load(resxFileName)
.Descendants()
.FirstOrDefault(_ => _.Attributes().Any(a => a.Value == resource))?
.Value;
}
并使用它:
GetStringFromDynamicResourceFile("MyFile.resx", "MyString1");