标题总结得非常好。我知道我可以使用嵌入式资源名称:C#从特定文件夹获取嵌入式资源或区分不同文件夹中的嵌入式资源
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
string[] files = assembly.GetManifestResourceNames();
但我想只能从特定文件夹获取嵌入式资源。或者至少能够区分来自不同文件夹的嵌入资源。
标题总结得非常好。我知道我可以使用嵌入式资源名称:C#从特定文件夹获取嵌入式资源或区分不同文件夹中的嵌入式资源
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
string[] files = assembly.GetManifestResourceNames();
但我想只能从特定文件夹获取嵌入式资源。或者至少能够区分来自不同文件夹的嵌入资源。
以下列格式返回资源。
[Namespace].[Folder].[Filename]
请注意,路径中的所有文件夹由.
分隔。所以,如果你有一个嵌入的资源具有以下配置
myproject.csproj (Namespace = com.mycompany.myproject) - Resources - Images - Icons - my_icon.ico
资源名称将是...
com.mycompany.myproject.Resources.Images.Icons.my_icon.ico
如果你想从一个特定的文件夹中的所有选择,你可以使用下面的LINQ表达或根据您的需求进行修改。
string prefix = "your_namespace.your_folder."
var resourceNames = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(name => name.StartsWith(prefix));
如果您创建一个名为图片的文件夹,然后将文件存在,那么资源的名称将成为Assembly.Images.fileName。
所以,你可以尝试这样的:
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var names = assembly.GetManifestResourceNames().Where (n => n.Contains(".Images."));
此代码将抛出一个错误,因为它不能转换IEnumerable的字符串。此外,它不会考虑同一文件夹下的多个文件 – Flavia 2013-04-11 19:10:53
糟糕,从另一个项目粘贴该代码,并忘记修改类型。我现在纠正了它。 – 2013-04-11 19:14:11
现在它值得一票:) – Flavia 2013-04-11 19:20:33