gpt4 book ai didi

c# - 从外部dll加载资源,并判断资源类型

转载 作者:行者123 更新时间:2023-11-30 20:48:00 30 4
gpt4 key购买 nike

我有一个 C# 应用程序,我们的所有资源都在一个库中。这基本上是几个文件夹,每个文件夹中都有一个或多个 .resx 文件。

在大多数情况下,.resx 文件具有字符串资源。少数有文件资源。

我的任务是浏览这些字符串资源并对它们进行处理。不过只是字符串,而不是文件。

目前,我可以从单独的 dll 加载资源:

var asm = System.Reflection.Assembly.LoadFrom("External.Resources.dll");

string[] strings = asm.GetManifestResourceNames();

foreach (var s in strings)
{
var rm = new ResourceManager(s, asm);

var rs = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true);

foreach (DictionaryEntry de in rs)
{
var val = de.Value.ToString();
var key = de.Key.ToString();
}
}

不幸的是,我无法分辨资源是什么。如果它是一个文件,值将只包含该文件的文本。

如何检查该值是字符串还是来自资源文件的文件(文本)?

最佳答案

如果你想得到原始类型的资源,那么你将不得不访问原始资源对象。它将具有特定类型的静态属性;例如文件将是 byte[],字符串是字符串等。

var asm = System.Reflection.Assembly.LoadFrom("External.Resources.dll");
string[] strings = asm.GetManifestResourceNames();

foreach (var s in strings)
{
var rm = new ResourceManager(s, asm);

// Get the fully qualified resource type name
// Resources are suffixed with .resource
var rst = s.Substring(0, s.IndexOf(".resource"));
var type = asm.GetType(rst, false);

// if type is null then its not .resx resource
if (null != type)
{
var resources = type.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
foreach (var res in resources)
{
// collect string type resources
if (res.PropertyType == typeof(string))
{
// get value from static property
string myResourceString = res.GetValue(null, null) as string;
}
}
}

}

关于c# - 从外部dll加载资源,并判断资源类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246877/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com