我正在尝试从类库加载资源。 事实上,这并不完全正确。 我正在尝试实现一种好的方法,用于从代码中任何引用的项目加载资源。
为此,我正在开发一个 ResourceHelper 类。 到目前为止就到这里了。
public class ResourceHelper : IResourceHelper
{
public string ReadTextFileFromResource(string resourceFileName)
{
StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri(resourceFileName, UriKind.Relative));
StreamReader streamReader = new StreamReader(streamResourceInfo.Stream);
return streamReader.ReadToEnd();
}
}
当资源位于主应用程序项目中时,此代码非常有效。 但是,如果我想在主应用程序引用的类库中拥有资源,则找不到该资源。
这是我如何调用上述类的典型示例。
string sqlCommandText = _resourceHelper.ReadTextFileFromResource("Resources\\InternalSqlScripts\\DatabasePatchingTablesPreparation\\SelectPatchingTableNames.sql");
有没有办法让这个引用成为正确的类库? 我尝试过 pack:// uri,但是我只能让它抛出异常。
您可以通过更精细的控制来指定应使用哪些程序集来获取嵌入资源来解决此问题。
Application
类不够通用。相反,您可以将 System.Reflection.Assembly.GetManifestResourceNames()
与 System.Reflection.Assembly.GetManifestResourceStream()
结合使用。
请参阅我的最近的回答,其中我解释了所需的步骤并建议了一篇关于此主题的好文章。