增加.NET framework 2.0支持

This commit is contained in:
hnvvv
2022-09-13 22:09:40 +08:00
parent 5e7a233783
commit e6730f3266
11 changed files with 106 additions and 57 deletions

View File

@@ -1,6 +1,6 @@

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

View File

@@ -1,6 +1,6 @@

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

View File

@@ -1,10 +1,17 @@
version: 2.2.5.{build}
image: Visual Studio 2022
version: 2.3.1.{build}
image:
- Visual Studio 2022
- Ubuntu
build:
build:
project: JinianNet.JNTemplate.sln
verbosity: minimal
configuration: Release
platform: Any CPU
before_build:
- cmd: dotnet --version
- cmd: dotnet restore
- dotnet --version
- dotnet restore
build_script:
- cmd: dotnet build
- cmd: dotnet test
- dotnet build
test_script:
- dotnet test

View File

@@ -86,7 +86,7 @@ $end
{
Url = "jiniannet.com"
});
var render = template.Render();;
var render = template.Render();
Assert.Equal("jiniannet.com", render);
}
@@ -104,7 +104,7 @@ $end
Title = "jiniannet.com",
Type = DemoType.Yes
});
var render = template.Render();;
var render = template.Render();
Assert.Equal("Yes", render);
}
@@ -117,7 +117,7 @@ $end
var templateContent = "${TagsTests.Value}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("TagsTests", typeof(TagsTests));
var render = template.Render();;
var render = template.Render();
Assert.Equal("8888", render);
}
@@ -132,7 +132,7 @@ $end
var templateContent = "$Plat";
var template = Engine.CreateTemplate(templateContent);
template.Set("Plat", PlatformID.Win32NT);
var render = template.Render();;
var render = template.Render();
Assert.Equal("Win32NT", render);
}
@@ -145,7 +145,7 @@ $end
var templateContent = "$set(aGroupName = \"Begin\"+value)$aGroupName";
var template = Engine.CreateTemplate(templateContent);
template.Set("value", 30);
var render = template.Render();;
var render = template.Render();
Assert.Equal("Begin30", render);
}
@@ -161,7 +161,7 @@ $end
var templateContent = "$date.Year.ToString().Length";
var template = Engine.CreateTemplate(templateContent);
template.Set("date", DateTime.Now);
var render = template.Render();;
var render = template.Render();
Assert.Equal("4", render);
}
@@ -174,7 +174,7 @@ $end
var templateContent = "你好,$*使用简写符加星号可对代码注释*$欢迎使用";
var template = Engine.CreateTemplate(templateContent);
template.Set("name", "jntemplate");
var render = template.Render();;
var render = template.Render();
Assert.Equal("你好,欢迎使用", render);
}
@@ -187,7 +187,7 @@ $end
var templateContent = @"$foreach(l in LinksList(true))$set(i=0)$set(i=i+1)${i}$end";
var template = Engine.CreateTemplate(templateContent);
template.Set<Func<bool, string[]>>("LinksList", (x) => new string[] { "1", "2", "3", "4" });
var render = template.Render();;
var render = template.Render();
Assert.Equal("1111", render);
}
@@ -200,7 +200,7 @@ $end
var templateContent = @"$set(i=0)$foreach(l in LinksList(true))$set(i=i+1)${i}$end${i}";
var template = Engine.CreateTemplate(templateContent);
template.Set<Func<bool, string[]>>("LinksList", (x) => new string[] { "1", "2", "3", "4" });
var render = template.Render();;
var render = template.Render();
Assert.Equal("12344", render);
}
@@ -288,7 +288,7 @@ $end
// var templateContent = "$fun.TestParams(\"字符串\",1,true)";
// var template = Engine.CreateTemplate(templateContent);
// template.Set("fun"]=( new TemplateMethod());
// var render = template.Render();;
// var render = template.Render();
// Assert.Equal("您输入的参数是有:字符串 1 True ", render);
//}
@@ -301,7 +301,7 @@ $end
// var templateContent = "$fun.TestParams2(\"您输入的参数是有:\",\"字符串\",1,true)";
// var template = Engine.CreateTemplate(templateContent);
// template.Set("fun"]=( new TemplateMethod());
// var render = template.Render();;
// var render = template.Render();
// Assert.Equal("您输入的参数是有:字符串 1 True ", render);
//}
@@ -316,7 +316,7 @@ $end
var templateContent = "($a)人";
var template = Engine.CreateTemplate(templateContent);
template.Set("a", "1");
var render = template.Render();;
var render = template.Render();
Assert.Equal("(1)人", render);
}
@@ -329,7 +329,7 @@ $end
{
var templateContent = "$set(str=\"3845254\\\\\\\"3366845\\\\\")$str";
var template = Engine.CreateTemplate(templateContent);
var render = template.Render();;
var render = template.Render();
Assert.Equal("3845254\\\"3366845\\", render);
}
@@ -342,7 +342,7 @@ $end
{
var templateContent = "var ${\"$\"}a =34;";
var template = Engine.CreateTemplate(templateContent);
var render = template.Render();;
var render = template.Render();
Assert.Equal("var $a =34;", render);
}
@@ -372,7 +372,7 @@ $end
}
var template = Engine.LoadTemplate(fileName);
template.Set("name", "jntemplate");
var render = template.Render();;
var render = template.Render();
Assert.Equal("你好jntemplate", render);
}
@@ -385,7 +385,7 @@ $end
{
var templateContent = "${12}";
var template = Engine.CreateTemplate(templateContent);
var render = template.Render();;
var render = template.Render();
Assert.Equal("12", render);
}
@@ -399,7 +399,7 @@ $end
var templateContent = "$data";
var template = Engine.CreateTemplate("TestListOfTOutput",templateContent);
template.Set("data", new List<object>());
var render = template.Render();;
var render = template.Render();
Assert.StartsWith("System.Collections.Generic.List`1", render);
}
@@ -416,7 +416,7 @@ $end
Name = "user",
Id = 48
});
var render = template.Render();;
var render = template.Render();
Assert.Equal("48", render);
}
@@ -468,7 +468,7 @@ $end";
var template = Engine.CreateTemplate(templateContent);
var render = template.Render();
Assert.Equal("70206", render.Replace("\r\n","").TrimEnd());
Assert.Equal("70206", render.Replace("\r","").Replace("\n","").TrimEnd());
}
@@ -480,7 +480,7 @@ $end";
{
var templateContent = @"replace(/\n/g,<br>);";
var template = Engine.CreateTemplate(templateContent);
var render = template.Render();;
var render = template.Render();
Assert.Equal(templateContent, render);
}
@@ -494,7 +494,7 @@ $end";
// var templateContent = "$date.Year";
// var template = Engine.CreateTemplate(templateContent);
// template.Set("date"]=(DateTime.Now);
// var render = template.Render();;
// var render = template.Render();
// Assert.Equal(DateTime.Now.Year.ToString(), render);
//}
}

View File

@@ -316,13 +316,7 @@ namespace JinianNet.JNTemplate.CodeCompilation
#if !NF40 && !NF45 && !NF35 && !NF20
CompileRenderTask(ctx, baseType, methods);
#endif
Type type =
#if NETSTANDARD2_0
ctx.TypeBuilder.AsType();
#else
ctx.TypeBuilder.CreateType();
#endif
Type type = ObjectBuilder.BuildType(ctx.TypeBuilder);
if (type == null)
{
return null;

View File

@@ -158,12 +158,7 @@ namespace JinianNet.JNTemplate.Dynamic
{
ImplementationProperty(p.PropertyType, typeBuilder, p.Name);
}
return
#if NETSTANDARD2_0
typeBuilder.AsType();
#else
typeBuilder.CreateType();
#endif
return BuildType(typeBuilder);
}
/// <summary>
@@ -245,6 +240,25 @@ namespace JinianNet.JNTemplate.Dynamic
}
/// <summary>
/// Gets a type object that represents this type.
/// </summary>
/// <param name="builder"></param>
/// <returns>An object that represents this type.</returns>
public static Type BuildType(TypeBuilder builder)
{
#if NETSTANDARD2_0
var typeInfo = builder.CreateTypeInfo();
if (typeInfo == null)
return null;
return typeInfo.AsType();
#else
return builder.CreateType();
#endif
}
/// <summary>
///
/// </summary>
@@ -258,13 +272,7 @@ namespace JinianNet.JNTemplate.Dynamic
{
ImplementationProperty(f.Value, typeBuilder, f.Key);
}
var type =
#if NETSTANDARD2_0
typeBuilder.AsType();
#else
typeBuilder.CreateType();
#endif
return type;
return BuildType(typeBuilder);
}
/// <summary>

View File

@@ -35,6 +35,14 @@ namespace JinianNet.JNTemplate
/// </summary>
bool EnableCompile { get; }
/// <summary>
/// Set a new value for variables.
/// </summary>
/// <param name="key">The key of the element to get</param>
/// <param name="value">The element with the specified key.</param>
void Set<T>(string key, T value);
#if !NF40 && !NF45 && !NF35 && !NF20
/// <summary>
/// Performs the render for a template.

View File

@@ -6,7 +6,7 @@
<RootNamespace>JinianNet.JNTemplate</RootNamespace>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Version>2.3.1-beta1</Version>
<Version>2.3.1</Version>
<Authors>JinianNet.com</Authors>
<Company>JinianNet.com</Company>
<Product>JNTemplate</Product>
@@ -25,8 +25,8 @@
<PostBuildEvent></PostBuildEvent>
<AssemblyOriginatorKeyFile>jiniannet.snk</AssemblyOriginatorKeyFile>
<PackageLicenseFile>License.txt</PackageLicenseFile>
<FileVersion>2.3.1.0</FileVersion>
<AssemblyVersion>2.3.1.0</AssemblyVersion>
<FileVersion>2.3.1.2</FileVersion>
<AssemblyVersion>2.3.1.2</AssemblyVersion>
<DelaySign>false</DelaySign>
</PropertyGroup>
@@ -94,8 +94,8 @@
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -78,7 +78,6 @@ namespace JinianNet.JNTemplate
return templateResult;
}
#if !NF40 && !NF45 && !NF35 && !NF20
/// <inheritdoc />
public Task RenderAsync(TextWriter writer, TemplateContext context, CancellationToken cancellationToken = default)

View File

@@ -21,5 +21,16 @@ namespace JinianNet.JNTemplate
/// Gets or sets the context of the template.
/// </summary>
public TemplateContext Context { get; set; }
/// <summary>
/// Set a new value for variables.
/// </summary>
/// <param name="key">The key of the element to get</param>
/// <param name="value">The element with the specified key.</param>
public void Set<T>(string key, T value)
{
this.Context.TempData.Set<T>(key, value);
}
}
}

View File

@@ -34,15 +34,28 @@ namespace JinianNet.JNTemplate
return document;
}
/// <summary>
/// Set a new value for variables.
/// </summary>
/// <param name="template">The <see cref="ITemplate"/>.</param>
/// <param name="key">The key of the element to get</param>
/// <param name="value">The element with the specified key.</param>
public static void Set<T>(this ITemplate template, string key, T value)
/// <param name="type">The type with the specified key.</param>
public static void Set(this ITemplate template, string key, object value, Type type)
{
template.Context.TempData.Set<T>(key, value);
template.Context.TempData.Set(key, value, type ?? value?.GetType());
}
/// <summary>
/// Set a new value for variables.
/// </summary>
/// <param name="template">The <see cref="ITemplate"/>.</param>
/// <param name="key">The key of the element to get</param>
/// <param name="value">The element with the specified key.</param>
public static void Set<T>(ITemplate template, string key, T value)
{
template.Set<T>(key, value);
}
/// <summary>
@@ -60,6 +73,15 @@ namespace JinianNet.JNTemplate
template.Context.TempData.Set(key, null, type);
}
/// <summary>
/// Set a static type for variables.
/// </summary>
/// <param name="template">The <see cref="ITemplate"/>.</param>
/// <param name="type">The type with the specified key.</param>
public static void SetStaticType(this ITemplate template, Type type)
{
template.Context.TempData.Set(type.Name, null, type);
}
/// <summary>
/// Set a anonymous object for variables.