Skip to content

Commit e6730f3

Browse files
committed
增加.NET framework 2.0支持
1 parent 5e7a233 commit e6730f3

11 files changed

Lines changed: 106 additions & 57 deletions

File tree

README-zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
# JNTemplate
3-
[![Build Status](https://travis-ci.org/jiniannet/jntemplate.svg?branch=master)](https://travis-ci.org/jiniannet/jntemplate)
3+
[![Build status](https://ci.appveyor.com/api/projects/status/55qww976tyt63hvq?svg=true)](https://ci.appveyor.com/project/jiniannet/jntemplate)
44
[![GitHub stars](https://img.shields.io/nuget/v/JinianNet.JNTemplate.svg)](https://www.nuget.org/packages/JinianNet.JNTemplate/)
55
[![GitHub stars](https://img.shields.io/github/stars/jiniannet/jntemplate.svg)](https://github.com/jiniannet/jntemplate/stargazers)
66
[![GitHub license](https://img.shields.io/badge/license-Mit-blue.svg)](https://raw.githubusercontent.com/jiniannet/jntemplate/master/License.txt)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
# JNTemplate
3-
[![Build Status](https://travis-ci.org/jiniannet/jntemplate.svg?branch=master)](https://travis-ci.org/jiniannet/jntemplate)
3+
[![Build status](https://ci.appveyor.com/api/projects/status/55qww976tyt63hvq?svg=true)](https://ci.appveyor.com/project/jiniannet/jntemplate)
44
[![GitHub stars](https://img.shields.io/nuget/v/JinianNet.JNTemplate.svg)](https://www.nuget.org/packages/JinianNet.JNTemplate/)
55
[![GitHub stars](https://img.shields.io/github/stars/jiniannet/jntemplate.svg)](https://github.com/jiniannet/jntemplate/stargazers)
66
[![GitHub license](https://img.shields.io/badge/license-Mit-blue.svg)](https://raw.githubusercontent.com/jiniannet/jntemplate/master/License.txt)

appveyor.yml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
version: 2.2.5.{build}
2-
image: Visual Studio 2022
1+
version: 2.3.1.{build}
2+
image:
3+
- Visual Studio 2022
4+
- Ubuntu
5+
build:
6+
build:
7+
project: JinianNet.JNTemplate.sln
8+
verbosity: minimal
39
configuration: Release
410
platform: Any CPU
511
before_build:
6-
- cmd: dotnet --version
7-
- cmd: dotnet restore
12+
- dotnet --version
13+
- dotnet restore
814
build_script:
9-
- cmd: dotnet build
10-
- cmd: dotnet test
15+
- dotnet build
16+
test_script:
17+
- dotnet test

src/JinianNet.JNTemplate.Test/TagsTests.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void TestProperty()
8686
{
8787
Url = "jiniannet.com"
8888
});
89-
var render = template.Render();;
89+
var render = template.Render();
9090
Assert.Equal("jiniannet.com", render);
9191
}
9292

@@ -104,7 +104,7 @@ public void TestEnumProperty()
104104
Title = "jiniannet.com",
105105
Type = DemoType.Yes
106106
});
107-
var render = template.Render();;
107+
var render = template.Render();
108108
Assert.Equal("Yes", render);
109109
}
110110

@@ -117,7 +117,7 @@ public void TestStaticProperty()
117117
var templateContent = "${TagsTests.Value}";
118118
var template = Engine.CreateTemplate(templateContent);
119119
template.SetStaticType("TagsTests", typeof(TagsTests));
120-
var render = template.Render();;
120+
var render = template.Render();
121121
Assert.Equal("8888", render);
122122
}
123123

@@ -132,7 +132,7 @@ public void TestEnum()
132132
var templateContent = "$Plat";
133133
var template = Engine.CreateTemplate(templateContent);
134134
template.Set("Plat", PlatformID.Win32NT);
135-
var render = template.Render();;
135+
var render = template.Render();
136136
Assert.Equal("Win32NT", render);
137137
}
138138

@@ -145,7 +145,7 @@ public void TestSet()
145145
var templateContent = "$set(aGroupName = \"Begin\"+value)$aGroupName";
146146
var template = Engine.CreateTemplate(templateContent);
147147
template.Set("value", 30);
148-
var render = template.Render();;
148+
var render = template.Render();
149149

150150
Assert.Equal("Begin30", render);
151151
}
@@ -161,7 +161,7 @@ public void TestReference()
161161
var templateContent = "$date.Year.ToString().Length";
162162
var template = Engine.CreateTemplate(templateContent);
163163
template.Set("date", DateTime.Now);
164-
var render = template.Render();;
164+
var render = template.Render();
165165
Assert.Equal("4", render);
166166
}
167167

@@ -174,7 +174,7 @@ public void TestComent()
174174
var templateContent = "你好,$*使用简写符加星号可对代码注释*$欢迎使用";
175175
var template = Engine.CreateTemplate(templateContent);
176176
template.Set("name", "jntemplate");
177-
var render = template.Render();;
177+
var render = template.Render();
178178
Assert.Equal("你好,欢迎使用", render);
179179
}
180180

@@ -187,7 +187,7 @@ public void TestForSetOnBody()
187187
var templateContent = @"$foreach(l in LinksList(true))$set(i=0)$set(i=i+1)${i}$end";
188188
var template = Engine.CreateTemplate(templateContent);
189189
template.Set<Func<bool, string[]>>("LinksList", (x) => new string[] { "1", "2", "3", "4" });
190-
var render = template.Render();;
190+
var render = template.Render();
191191
Assert.Equal("1111", render);
192192
}
193193

@@ -200,7 +200,7 @@ public void TestForSet()
200200
var templateContent = @"$set(i=0)$foreach(l in LinksList(true))$set(i=i+1)${i}$end${i}";
201201
var template = Engine.CreateTemplate(templateContent);
202202
template.Set<Func<bool, string[]>>("LinksList", (x) => new string[] { "1", "2", "3", "4" });
203-
var render = template.Render();;
203+
var render = template.Render();
204204
Assert.Equal("12344", render);
205205
}
206206

@@ -288,7 +288,7 @@ public void TestTable3()
288288
// var templateContent = "$fun.TestParams(\"字符串\",1,true)";
289289
// var template = Engine.CreateTemplate(templateContent);
290290
// template.Set("fun"]=( new TemplateMethod());
291-
// var render = template.Render();;
291+
// var render = template.Render();
292292
// Assert.Equal("您输入的参数是有:字符串 1 True ", render);
293293
//}
294294

@@ -301,7 +301,7 @@ public void TestTable3()
301301
// var templateContent = "$fun.TestParams2(\"您输入的参数是有:\",\"字符串\",1,true)";
302302
// var template = Engine.CreateTemplate(templateContent);
303303
// template.Set("fun"]=( new TemplateMethod());
304-
// var render = template.Render();;
304+
// var render = template.Render();
305305
// Assert.Equal("您输入的参数是有:字符串 1 True ", render);
306306
//}
307307

@@ -316,7 +316,7 @@ public void TestVariable()
316316
var templateContent = "($a)人";
317317
var template = Engine.CreateTemplate(templateContent);
318318
template.Set("a", "1");
319-
var render = template.Render();;
319+
var render = template.Render();
320320

321321
Assert.Equal("(1)人", render);
322322
}
@@ -329,7 +329,7 @@ public void TestString()
329329
{
330330
var templateContent = "$set(str=\"3845254\\\\\\\"3366845\\\\\")$str";
331331
var template = Engine.CreateTemplate(templateContent);
332-
var render = template.Render();;
332+
var render = template.Render();
333333
Assert.Equal("3845254\\\"3366845\\", render);
334334

335335
}
@@ -342,7 +342,7 @@ public void TestEncodeString()
342342
{
343343
var templateContent = "var ${\"$\"}a =34;";
344344
var template = Engine.CreateTemplate(templateContent);
345-
var render = template.Render();;
345+
var render = template.Render();
346346
Assert.Equal("var $a =34;", render);
347347
}
348348

@@ -372,7 +372,7 @@ public void TestBaseLoadTemplate()
372372
}
373373
var template = Engine.LoadTemplate(fileName);
374374
template.Set("name", "jntemplate");
375-
var render = template.Render();;
375+
var render = template.Render();
376376
Assert.Equal("你好,jntemplate", render);
377377
}
378378

@@ -385,7 +385,7 @@ public void TestInt()
385385
{
386386
var templateContent = "${12}";
387387
var template = Engine.CreateTemplate(templateContent);
388-
var render = template.Render();;
388+
var render = template.Render();
389389
Assert.Equal("12", render);
390390

391391
}
@@ -399,7 +399,7 @@ public void TestListOfTOutput()
399399
var templateContent = "$data";
400400
var template = Engine.CreateTemplate("TestListOfTOutput",templateContent);
401401
template.Set("data", new List<object>());
402-
var render = template.Render();;
402+
var render = template.Render();
403403
Assert.StartsWith("System.Collections.Generic.List`1", render);
404404
}
405405

@@ -416,7 +416,7 @@ public void TestAnonymousObject()
416416
Name = "user",
417417
Id = 48
418418
});
419-
var render = template.Render();;
419+
var render = template.Render();
420420
Assert.Equal("48", render);
421421

422422
}
@@ -468,7 +468,7 @@ public void TestArrayForTag()
468468
var template = Engine.CreateTemplate(templateContent);
469469
var render = template.Render();
470470

471-
Assert.Equal("70206", render.Replace("\r\n","").TrimEnd());
471+
Assert.Equal("70206", render.Replace("\r","").Replace("\n","").TrimEnd());
472472
}
473473

474474

@@ -480,7 +480,7 @@ public void TestNewline()
480480
{
481481
var templateContent = @"replace(/\n/g,<br>);";
482482
var template = Engine.CreateTemplate(templateContent);
483-
var render = template.Render();;
483+
var render = template.Render();
484484

485485
Assert.Equal(templateContent, render);
486486
}
@@ -494,7 +494,7 @@ public void TestNewline()
494494
// var templateContent = "$date.Year";
495495
// var template = Engine.CreateTemplate(templateContent);
496496
// template.Set("date"]=(DateTime.Now);
497-
// var render = template.Render();;
497+
// var render = template.Render();
498498
// Assert.Equal(DateTime.Now.Year.ToString(), render);
499499
//}
500500
}

src/JinianNet.JNTemplate/CodeCompilation/CompileContextExtensions.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -316,13 +316,7 @@ private static ICompilerResult Compile(this CompileContext ctx, ITag[] tags)
316316
#if !NF40 && !NF45 && !NF35 && !NF20
317317
CompileRenderTask(ctx, baseType, methods);
318318
#endif
319-
Type type =
320-
#if NETSTANDARD2_0
321-
ctx.TypeBuilder.AsType();
322-
#else
323-
ctx.TypeBuilder.CreateType();
324-
#endif
325-
319+
Type type = ObjectBuilder.BuildType(ctx.TypeBuilder);
326320
if (type == null)
327321
{
328322
return null;

src/JinianNet.JNTemplate/Dynamic/ObjectBuilder.cs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,7 @@ public static Type GenerateTypeFrom(Type baseType)
158158
{
159159
ImplementationProperty(p.PropertyType, typeBuilder, p.Name);
160160
}
161-
return
162-
#if NETSTANDARD2_0
163-
typeBuilder.AsType();
164-
#else
165-
typeBuilder.CreateType();
166-
#endif
161+
return BuildType(typeBuilder);
167162
}
168163

169164
/// <summary>
@@ -245,6 +240,25 @@ public static TypeBuilder DefineType(AssemblyBuilder assemblyBuilder, Type inter
245240
}
246241

247242

243+
244+
/// <summary>
245+
/// Gets a type object that represents this type.
246+
/// </summary>
247+
/// <param name="builder"></param>
248+
/// <returns>An object that represents this type.</returns>
249+
public static Type BuildType(TypeBuilder builder)
250+
{
251+
#if NETSTANDARD2_0
252+
var typeInfo = builder.CreateTypeInfo();
253+
if (typeInfo == null)
254+
return null;
255+
return typeInfo.AsType();
256+
#else
257+
return builder.CreateType();
258+
#endif
259+
}
260+
261+
248262
/// <summary>
249263
///
250264
/// </summary>
@@ -258,13 +272,7 @@ public static Type GenerateType(string name, IEnumerable<KeyValuePair<string, Ty
258272
{
259273
ImplementationProperty(f.Value, typeBuilder, f.Key);
260274
}
261-
var type =
262-
#if NETSTANDARD2_0
263-
typeBuilder.AsType();
264-
#else
265-
typeBuilder.CreateType();
266-
#endif
267-
return type;
275+
return BuildType(typeBuilder);
268276
}
269277

270278
/// <summary>

src/JinianNet.JNTemplate/ITemplate.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ public interface ITemplate
3535
/// </summary>
3636
bool EnableCompile { get; }
3737

38+
39+
/// <summary>
40+
/// Set a new value for variables.
41+
/// </summary>
42+
/// <param name="key">The key of the element to get</param>
43+
/// <param name="value">The element with the specified key.</param>
44+
void Set<T>(string key, T value);
45+
3846
#if !NF40 && !NF45 && !NF35 && !NF20
3947
/// <summary>
4048
/// Performs the render for a template.

src/JinianNet.JNTemplate/JinianNet.JNTemplate.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<RootNamespace>JinianNet.JNTemplate</RootNamespace>
77
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
88
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
9-
<Version>2.3.1-beta1</Version>
9+
<Version>2.3.1</Version>
1010
<Authors>JinianNet.com</Authors>
1111
<Company>JinianNet.com</Company>
1212
<Product>JNTemplate</Product>
@@ -25,8 +25,8 @@
2525
<PostBuildEvent></PostBuildEvent>
2626
<AssemblyOriginatorKeyFile>jiniannet.snk</AssemblyOriginatorKeyFile>
2727
<PackageLicenseFile>License.txt</PackageLicenseFile>
28-
<FileVersion>2.3.1.0</FileVersion>
29-
<AssemblyVersion>2.3.1.0</AssemblyVersion>
28+
<FileVersion>2.3.1.2</FileVersion>
29+
<AssemblyVersion>2.3.1.2</AssemblyVersion>
3030
<DelaySign>false</DelaySign>
3131
</PropertyGroup>
3232

@@ -94,8 +94,8 @@
9494
</PropertyGroup>
9595

9696
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
97-
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
98-
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
97+
<PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
98+
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
9999
</ItemGroup>
100100

101101
<ItemGroup>

src/JinianNet.JNTemplate/Template.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ private IResult GetResult(TemplateContext context)
7878
return templateResult;
7979
}
8080

81-
8281
#if !NF40 && !NF45 && !NF35 && !NF20
8382
/// <inheritdoc />
8483
public Task RenderAsync(TextWriter writer, TemplateContext context, CancellationToken cancellationToken = default)

src/JinianNet.JNTemplate/TemplateBase.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,16 @@ public abstract class TemplateBase
2121
/// Gets or sets the context of the template.
2222
/// </summary>
2323
public TemplateContext Context { get; set; }
24+
25+
26+
/// <summary>
27+
/// Set a new value for variables.
28+
/// </summary>
29+
/// <param name="key">The key of the element to get</param>
30+
/// <param name="value">The element with the specified key.</param>
31+
public void Set<T>(string key, T value)
32+
{
33+
this.Context.TempData.Set<T>(key, value);
34+
}
2435
}
2536
}

0 commit comments

Comments
 (0)