/// <summary> /// Constructor /// </summary> /// <param name="assembly">assembly containing embedded resource</param> /// <param name="resourceName">resource name in assembly</param> public EmbeddedResource(Assembly assembly, string resourceName) { Assembly = Code.ExpectsArgument(assembly, nameof(assembly), TaggingUtilities.ReserveTag(0x238208c0 /* tag_9669a */)); Name = Code.ExpectsNotNullOrWhiteSpaceArgument(resourceName, nameof(resourceName), TaggingUtilities.ReserveTag(0x238208c1 /* tag_9669b */)); ResourceContent = new Lazy <Tuple <ResourceReadStatus, byte[]> >(() => { ResourceReadStatus status = ResourceReadStatus.NotFound; byte[] content = null; try { string resourceContent = Assembly.LoadEmbeddedResourceAsString(Name); if (resourceContent != null) { content = Encoding.UTF8.GetBytes(resourceContent); status = ResourceReadStatus.Success; } } catch (Exception ex) { ULSLogging.ReportExceptionTag(0x238208c2 /* tag_9669c */, Categories.ConfigurationDataSet, ex, "Unable to read resource {resourceName}", resourceName); status = ResourceReadStatus.ReadFailed; } return(Tuple.Create(status, content)); }, LazyThreadSafetyMode.PublicationOnly); }
/// <summary> /// Read the content of a resource /// </summary> /// <param name="resource">resource</param> /// <returns>read status and resource details</returns> public static Tuple <ResourceReadStatus, IResourceDetails> Read(this IResource resource) { if (!Code.ValidateArgument(resource, nameof(resource), TaggingUtilities.ReserveTag(0x238208cf /* tag_9669p */))) { return(Tuple.Create <ResourceReadStatus, IResourceDetails>(ResourceReadStatus.ReadFailed, null)); } ResourceReadStatus status = resource.GetContent(out byte[] content); return(Tuple.Create( status, (IResourceDetails) new ResourceDetails(resource.LastWriteTime, content?.LongLength ?? 0, content ?? new byte[] { }))); }