예제 #1
0
        public void CanSignAssembly(string inputAssembly, string outputAssembly)
        {
            string keyFile = Path.Combine(KeyDir, "test.snk");
            var    key     = new StrongNameKey(keyFile);

            var signer = new StrongNameSigner();

            signer.SignAssembly(inputAssembly, key, outputAssembly);

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                int exitCode = Exec.RunNetFxTool("sn.exe", new[] { "-v", outputAssembly });
                exitCode.Should()
                .Be(0);
            }

            PEReader assemblyReader = GetPEReader(outputAssembly);

            assemblyReader.PEHeaders.CorHeader.Flags.Should()
            .HaveFlag(CorFlags.StrongNameSigned);

            AssemblyName        assemblyName = GetAssemblyName(assemblyReader.GetMetadataReader());
            StrongNamePublicKey publicKey    = key.GetPublicKey();

            assemblyName.GetPublicKey()
            .Should()
            .BeEquivalentTo(publicKey.CreatePublicKey());

            assemblyName.GetPublicKeyToken()
            .Should()
            .BeEquivalentTo(publicKey.CreatePublicKeyToken());
        }
예제 #2
0
 public StrongNamePublicKey LoadPublicKey(string path)
 {
     try
     {
         var privateKey = new StrongNameKey(path);
         return(privateKey.GetPublicKey());
     }
     catch (InvalidKeyException)
     {
         return(new StrongNamePublicKey(path));
     }
 }