protected Stream GetDeployedResourceStream(string resourceName)
        {
            //CEE - let's see if we can use a stream for the embedded resource instead...

            //Assembly.CodeBase returns the path in URI format, but we need the real path, so run the uri path through
            //Path.GetDirectory name to convert the path seperators to the system path separator, and pull off the assmembly
            //name.  Then get SubString(8) to pull off the f:/// portion of the string

            //string executionPath = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(8);
            //executionPath = System.IO.Path.GetDirectoryName(executionPath);

            //string resFolder = Path.Combine( executionPath, "Resources" );

            //string fullResourceName = Path.Combine( resFolder, resourceName);
            //if( !File.Exists( fullResourceName ) )
            //    fullResourceName = Path.Combine( executionPath, resourceName);;

            //FileStream fs = new FileStream(fullResourceName, FileMode.Open, FileAccess.Read);

            //CEE - let's see if we can use a stream for the embedded resource instead...
            Assembly asm = Assembly.GetExecutingAssembly();
            AssemblyFS asmFS = new AssemblyFS( asm );

            string relResName = Path.Combine( "Resources", resourceName );
            Stream s = asmFS.File.Open( relResName );
            return s;
        }
Beispiel #2
0
        public void Test_Synchronize()
        {
            string pathToPopulate = Path.GetTempPath();

            Assembly asm = Assembly.GetExecutingAssembly();
            AssemblyFS asmIO = new AssemblyFS( asm );

            string error = string.Empty;
            if( !asmIO.Synchronize( pathToPopulate, out error ) )
                Assert.Fail( error );

            AssemblyName asmNameTmp = asmIO.ASM.GetName();
            string asmName = asmNameTmp.Name;

            string[] resources = asmIO.ASM.GetManifestResourceNames();
            foreach( string res in resources )
            {
                string resPath = res.Replace( asmName, string.Empty );
                resPath = resPath.TrimStart( '.' );
                resPath = resPath.Replace( '.', Path.DirectorySeparatorChar );

                //If it looks like we had a file extension, repair that...
                int lastSlash = resPath.LastIndexOf( Path.DirectorySeparatorChar );
                if( lastSlash + 5 >= resPath.Length )
                {
                    resPath = resPath.Insert( lastSlash, "." );
                    resPath = resPath.Remove( lastSlash + 1, 1 );

                    //Get the new "last slash" so that we can find what the destination should be
                    lastSlash = resPath.LastIndexOf( Path.DirectorySeparatorChar );
                }

                string filename = resPath.Substring( lastSlash + 1 );
                string directory = resPath.Substring( 0, lastSlash );

                string subDirPath = Path.Combine( pathToPopulate, directory );
                string filePath = Path.Combine( subDirPath, filename );
                Assert.IsTrue( File.Exists( filePath ) );
            }
        }
        public static bool SynchronizeResources()
        {
            try
            {
                Assembly asm = Assembly.GetExecutingAssembly();
                AssemblyFS asmFS = new AssemblyFS( asm );

                string resourcePath = GetBaseResourcePath();
                if( !Directory.Exists( resourcePath ) )
                    Directory.CreateDirectory( resourcePath );

                string error = string.Empty;
                if( asmFS.Synchronize( resourcePath, out error ) )
                    return true;
            }
            catch { }

            return false;
        }