4 using System.Collections.Generic;
6 using System.Reflection;
10 namespace SiliconStudio.AssemblyProcessor
16 var assembly = context.Assembly;
17 var mscorlibAssembly = CecilExtensions.FindCorlibAssembly(assembly);
18 if (mscorlibAssembly == null)
19 throw new InvalidOperationException(
"Missing mscorlib.dll from assembly");
23 var assemblyFileVersionAttributeType = mscorlibAssembly.MainModule.GetTypeResolved(typeof(AssemblyFileVersionAttribute).FullName);
24 var assemblyMethodConstructor = assembly.MainModule.Import(assemblyFileVersionAttributeType.Methods.FirstOrDefault(method => method.IsConstructor && method.Parameters.Count == 1));
25 var stringType = mscorlibAssembly.MainModule.GetTypeResolved(typeof(
string).FullName);
28 var gitCommitShortId =
"0";
31 var build = (long)DateTime.UtcNow.Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds;
34 var version = assembly.Name.Version;
35 var fileVersion = string.Format(
"{0}.{1}.{2}.{3}", version.Major, version.Minor, build, gitCommitShortId);
38 bool fileVersionUpdated =
false;
39 for (
int i = 0; i < assembly.CustomAttributes.Count; i++)
41 var customAttribute = assembly.CustomAttributes[i];
42 if (customAttribute.AttributeType.FullName == typeof(AssemblyFileVersionAttribute).FullName)
44 customAttribute.ConstructorArguments.Clear();
45 customAttribute.ConstructorArguments.Add(
new CustomAttributeArgument(stringType, fileVersion));
46 fileVersionUpdated =
true;
51 if (!fileVersionUpdated)
53 var assemblyFileVersion =
new CustomAttribute(assemblyMethodConstructor);
54 assemblyFileVersion.ConstructorArguments.Add(
new CustomAttributeArgument(stringType, fileVersion));
55 assembly.CustomAttributes.Add(assemblyFileVersion);
bool Process(AssemblyProcessorContext context)