Skip to content

Commit d40847d

Browse files
author
Kevin Johnson
committed
Uses Mono.Cecil to generate an assembly with the specified version.
1 parent 6260365 commit d40847d

File tree

1 file changed

+13
-25
lines changed

1 file changed

+13
-25
lines changed
Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
namespace GitVersionExe.Tests
22
{
33
using System;
4-
using System.CodeDom.Compiler;
4+
using System.IO;
55
using System.Reflection;
66
using GitVersion;
7+
using Mono.Cecil;
78
using NUnit.Framework;
89

910
[TestFixture]
1011
public class VersionWriterTests
1112
{
12-
[Category("NoMono")]
13-
[Description("Won't run on Mono because generating an assembly at runtime does not work on mono")]
1413
[Test]
1514
public void WriteVersion_ShouldWriteFileVersion_WithNoPrereleaseTag()
1615
{
@@ -23,8 +22,6 @@ public void WriteVersion_ShouldWriteFileVersion_WithNoPrereleaseTag()
2322
Assert.AreEqual("1.0.0", version);
2423
}
2524

26-
[Category("NoMono")]
27-
[Description("Won't run on Mono because generating an assembly at runtime does not work on mono")]
2825
[Test]
2926
public void WriteVersion_ShouldWriteFileVersion_WithPrereleaseTag()
3027
{
@@ -39,30 +36,21 @@ public void WriteVersion_ShouldWriteFileVersion_WithPrereleaseTag()
3936

4037
private Assembly GenerateAssembly(Version fileVersion, string prereleaseInfo)
4138
{
42-
var source = string.Format(@"
43-
using System.Reflection;
44-
using System.Runtime.CompilerServices;
45-
[assembly: AssemblyTitle(""GitVersion.DynamicUnitTests"")]
46-
[assembly: AssemblyProduct(""GitVersion"")]
47-
[assembly: AssemblyVersion(""{0}"")]
48-
[assembly: AssemblyFileVersion(""{0}"")]
49-
[assembly: AssemblyInformationalVersion(""{0}{1}"")]
39+
var definition = new AssemblyNameDefinition("test-asm", fileVersion);
5040

51-
public class B
52-
{{
53-
public static int k=7;
54-
}}
55-
", fileVersion, prereleaseInfo);
41+
var asmDef = AssemblyDefinition.CreateAssembly(definition, "test-asm", ModuleKind.Dll);
42+
var constructor = typeof(AssemblyInformationalVersionAttribute).GetConstructor(new[] { typeof(string) });
43+
var methodReference = asmDef.MainModule.Import(constructor);
44+
var customAttribute = new CustomAttribute(methodReference);
45+
customAttribute.ConstructorArguments.Add(new CustomAttributeArgument(asmDef.MainModule.TypeSystem.String, fileVersion + prereleaseInfo));
46+
asmDef.CustomAttributes.Add(customAttribute);
5647

57-
CompilerParameters parameters = new CompilerParameters
48+
using (var memoryStream = new MemoryStream())
5849
{
59-
GenerateInMemory = true,
60-
GenerateExecutable = false,
61-
OutputAssembly = "GitVersion.DynamicUnitTests.dll"
62-
};
50+
asmDef.Write(memoryStream);
6351

64-
var r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(parameters, source);
65-
return r.CompiledAssembly;
52+
return Assembly.Load(memoryStream.ToArray());
53+
}
6654
}
6755
}
6856
}

0 commit comments

Comments
 (0)