예제 #1
0
        /// <summary>
        /// Make sure a valid framework assembly is used (if it is a framework assembly).
        /// </summary>
        private static void VerifyFrameworkAssembly(AssemblyDefinition assembly, string path)
        {
            // Check if the assembly is a framework assembly.
            if (!IsFrameworkAssembly(assembly))
            {
                return;
            }

            // Check informational version
            var attr = assembly.CustomAttributes.FirstOrDefault(x => x.AttributeType.FullName == AttributeConstants.AssemblyInformationalVersionAttributeFullName);

            if (attr == null)
            {
                throw new LoaderException(string.Format("Assembly {0} is not a valid framework assembly. [missing informational version]", assembly.Name));
            }
            var expectedPostfix = string.Format(", Dot42 {0}", typeof(AssemblyResolver).Assembly.GetName().Version);
            var infVersion      = (attr.ConstructorArguments.Count != 0) ? attr.ConstructorArguments[0].Value as string : null;

            if ((infVersion == null) || !infVersion.EndsWith(expectedPostfix))
            {
                var msg = string.Format("Assembly {0} is not a valid framework assembly. [invalid informational version: expected postfix '{1}' got '{2}']", assembly.Name, expectedPostfix, infVersion);
#if DEBUG
                Console.WriteLine(msg);
#else
                throw new LoaderException(string.Format(msg));
#endif
            }

            // Check public key token
            var token = GetPublicKeyToken(assembly.Name);
            if (token != AssemblyConstants.SdkPublicKeyToken)
            {
                // throw new LoaderException(string.Format("Assembly {0} is not a valid framework assembly. [invalid token]", assembly.Name));
            }

            if (!SnToolResolver.VerifyAssembly(path))
            {
                // throw new LoaderException(string.Format("Assembly {0} is not a valid framework assembly. Strong name verification failed.", assembly.Name));
            }
        }
예제 #2
0
 /// <summary>
 /// Use sn.exe to verify the given assembly.
 /// </summary>
 /// <param name="assemblyName">The name of the assembly to verify.</param>
 /// <returns>True if it verifies OK, false otherwise.</returns>
 public static bool VerifyAssembly(string assemblyName)
 {
     return(SnToolResolver.RunSnTool(string.Format("-v \"{0}\"", assemblyName)));
 }