예제 #1
0
 static bool IsDotNetCoreBundle(string filename)
 {
     if (!PortableExecutableFileHelpers.IsPE(filename, out bool isExe, out bool hasDotNetMetadata))
     {
         return(false);
     }
     if (!isExe || hasDotNetMetadata)
     {
         return(false);
     }
     try {
         using (var stream = File.OpenRead(filename)) {
             if (stream.Length < bundleSig.Length)
             {
                 return(false);
             }
             stream.Position = stream.Length - bundleSig.Length;
             var sig = new byte[bundleSig.Length];
             stream.Read(sig, 0, sig.Length);
             for (int i = 0; i < sig.Length; i++)
             {
                 if (bundleSig[i] != sig[i])
                 {
                     return(false);
                 }
             }
             return(true);
         }
     }
     catch {
     }
     return(false);
 }
예제 #2
0
        internal static bool IsDotNetCoreAppHostFilename(string filename)
        {
            if (!File.Exists(filename))
            {
                return(false);
            }

            // We detect the apphost.exe like so:
            //	- must have an exe extension
            //	- must be a PE file and an EXE (DLL bit cleared)
            //	- must not have .NET metadata
            //	- must have a file with the same name but a dll extension
            //	- this dll file must be a PE file and have .NET metadata

            if (!StringComparer.OrdinalIgnoreCase.Equals(Path.GetExtension(filename), ".exe"))
            {
                return(false);
            }
            var dllFilename = Path.ChangeExtension(filename, "dll");

            if (!File.Exists(dllFilename))
            {
                return(false);
            }
            if (!PortableExecutableFileHelpers.IsPE(filename, out bool isExe, out bool hasDotNetMetadata))
            {
                return(false);
            }
            if (!isExe || hasDotNetMetadata)
            {
                return(false);
            }
            if (!PortableExecutableFileHelpers.IsPE(dllFilename, out _, out hasDotNetMetadata))
            {
                return(false);
            }
            if (!hasDotNetMetadata)
            {
                return(false);
            }

            return(true);
        }
예제 #3
0
        DotNetFrameworkStartDebuggingOptions GetDefaultOptions(string filename, string breakKind, StartDebuggingOptions options)
        {
            bool isExe = PortableExecutableFileHelpers.IsExecutable(filename);

            if (isExe)
            {
                var dnfOptions = CreateOptions(breakKind);
                Initialize(filename, dnfOptions);
                return(dnfOptions);
            }
            else
            {
                // If it's a DLL, use the old EXE options if available
                if (options is DotNetFrameworkStartDebuggingOptions dnfOptions)
                {
                    return(dnfOptions);
                }
                return(CreateOptions(breakKind));
            }
        }