#region --------------- Copyright Dresser Wayne Pignone ------------- /* * $Log: /Wrk/WayneLibraries/Wrk/Common/Assemblies.cs $ * * 4 07-07-06 9:33 Mattias.larsson * Fixed some FxCop issues. * * 3 06-12-22 14:53 roger.m�nsson * Corrected last checkin * * 2 06-12-22 13:49 roger.m�nsson * Added the GetManifestResourceStreamWithPartialName method */ #endregion using System; using System.IO; using System.Text.RegularExpressions; namespace Wayne.Lib { /// <summary> /// Static help class for Assembly issues. /// </summary> public static class Assemblies { #region FilePath Methods /// <summary> /// Get the calling assembly's file path. /// </summary> /// <returns></returns> public static string GetFilePath() { return GetFilePath(System.Reflection.Assembly.GetCallingAssembly()); } /// <summary> /// Get the file path of the given assembly. /// </summary> /// <param name="assembly"></param> /// <returns></returns> public static string GetFilePath(System.Reflection.Assembly assembly) { if (assembly == null) throw new NullReferenceException("assembly"); return Path.GetDirectoryName(assembly.ManifestModule.FullyQualifiedName); } #endregion #region Resource Methods /// <summary> /// Gets a manifest resource stream from an assembly, where only the file name is known. /// </summary> /// <param name="knownResourceNameEnd">The known file name, i.e. only the end of the Manifest resource name.</param> /// <param name="assemblyWithResource">The assembly that is expected to contain the resource.</param> /// <returns>If the resource is found, the stream is returned, otherwise null.</returns> public static System.IO.Stream GetManifestResourceStreamWithPartialName(string knownResourceNameEnd, System.Reflection.Assembly assemblyWithResource) { if (knownResourceNameEnd == null) throw new ArgumentNullException("knownResourceNameEnd"); if (assemblyWithResource == null) throw new ArgumentNullException("assemblyWithResource"); string[] manifestResouceNames = assemblyWithResource.GetManifestResourceNames(); string resourceName = ""; foreach (string candidate in manifestResouceNames) { if (candidate.EndsWith(knownResourceNameEnd, StringComparison.InvariantCultureIgnoreCase)) { resourceName = candidate; break; } } return assemblyWithResource.GetManifestResourceStream(resourceName); } /// <summary> /// Gets a manifest resource stream from an assembly, using a regular expression. /// </summary> /// <param name="resourceRegEx">Regular expression for the resource name.</param> /// <param name="assemblyWithResource">The assembly that is expected to contain the resource.</param> /// <returns>If the resource is found, the stream is returned, otherwise null.</returns> public static System.IO.Stream GetManifestResourceStreamWithRegex(string resourceRegEx, System.Reflection.Assembly assemblyWithResource) { if (resourceRegEx == null) throw new ArgumentNullException("resourceRegEx"); if (assemblyWithResource == null) throw new ArgumentNullException("assemblyWithResource"); string[] manifestResouceNames = assemblyWithResource.GetManifestResourceNames(); string resourceName = ""; Regex regex = new Regex(resourceRegEx); foreach (string candidate in manifestResouceNames) { if (regex.IsMatch(candidate)) { resourceName = candidate; break; } } return assemblyWithResource.GetManifestResourceStream(resourceName); } ///// <summary> ///// NOT IMPLEMENTED YET! Get a resource stream from the executing assembly using the resource name. ///// </summary> ///// <param name="resourceName">The name of the resource file (in the calling assembly). ///// Note that if the file is put under a sub-folder, the resourceName should begin ///// with the sub-folder's name followed by a dot (e.g. "MySubFolder.MyResource.txt").</param> ///// <returns></returns> //public static Stream GetResourceStream(string resourceName) //{ // return GetResourceStream(resourceName, System.Reflection.Assembly.GetCallingAssembly()); //} ///// <summary> ///// NOT IMPLEMENTED YET! Get a resource stream from an assembly using the resource name. ///// </summary> ///// <param name="resourceName">The name of the resource file. ///// <note>Note that if the file is put under a sub-folder, the resourceName should begin ///// with the sub-folder's name followed by a dot (e.g. "MySubFolder.MyResource.txt").</note></param> ///// <param name="assembly"></param> ///// <returns></returns> //public static Stream GetResourceStream(string resourceName, System.Reflection.Assembly assembly) //{ // throw new NotImplementedException(); // //if (assembly == null) // // throw new NullReferenceException("assembly"); // //string[] x = assembly.GetManifestResourceNames(); // //DefaultNamespace // ////Microsoft.Win32. // //RootNamespace // ////assembly.ManifestModule. // //return assembly.GetManifestResourceStream(assembly.GetName().Name + "." + resourceName); //} #endregion } }