/// <summary>Executes the task.</summary> /// <param name="includePatterns">The include patterns.</param> /// <param name="excludePatterns">The exclude patterns.</param> /// <param name="keyFileName">Name of the key file.</param> /// <param name="password">The password.</param> /// <param name="force"> /// if set to <c>true</c> assemblies will be signed even if they are already signed. /// </param> public virtual void Execute( string[] includePatterns, string[] excludePatterns, string keyFileName, string password, bool force) { var keyPair = MsilUtilities.LoadKeyPair(keyFileName, password); foreach (var fileName in FindFiles(includePatterns, excludePatterns)) { var assembly = MsilUtilities.LoadAssembly(fileName); if (!MsilUtilities.IsManaged(assembly)) { Log.Warn("Assembly '{0}' is unmanaged, thus cannot be resigned", fileName); continue; } if (MsilUtilities.IsSigned(assembly)) { if (force) { Log.Warn("Assembly '{0}' was previously signed, but it going to be resigned with new key", fileName); } else { Log.Debug("Assembly '{0}' is already signed so it does not need resigning", fileName); continue; } } MsilUtilities.SaveAssembly(assembly, fileName, keyPair); } }
private void SignAndFixAssemblies(StrongNameKeyPair keyPair) { var sorted = TopologicalSort <AssemblyInfo> .Sort(_assemblyInfos, GetReferencedAssemblies).ToArray(); foreach (var assemblyInfo in sorted) { var needsRewrite = !MsilUtilities.IsSigned(assemblyInfo.Assembly) || assemblyInfo.References.Any(r => r.Invalid) || assemblyInfo.References.Any(r => r.Target.Rewritten); if (!needsRewrite) { continue; } if (!assemblyInfo.CanBeSigned) { Log.Warn( "Assembly '{0}' or one of its dependencies is unmanaged or thus it cannot be signed.", assemblyInfo.FileName); assemblyInfo.ReferencedBy .Select(r => r.Source).ToList() .ForEach(a => a.CanBeSigned = false); } MsilUtilities.SaveAssembly(assemblyInfo.Assembly, assemblyInfo.FileName, keyPair); assemblyInfo.Assembly = MsilUtilities.LoadAssembly(assemblyInfo.FileName); assemblyInfo.ReferencedBy.ForEach(r => r.Invalid = true); assemblyInfo.Rewritten = true; FixupReferencesTo(assemblyInfo); } }