/// <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)); } }
/// <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))); }