mirror of
https://gitee.com/jiniannet/jntemplate.git
synced 2025-12-06 10:58:59 +08:00
增加.NET framework 2.0支持
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
|
||||
# JNTemplate
|
||||
[](https://travis-ci.org/jiniannet/jntemplate)
|
||||
[](https://ci.appveyor.com/project/jiniannet/jntemplate)
|
||||
[](https://www.nuget.org/packages/JinianNet.JNTemplate/)
|
||||
[](https://github.com/jiniannet/jntemplate/stargazers)
|
||||
[](https://raw.githubusercontent.com/jiniannet/jntemplate/master/License.txt)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
# JNTemplate
|
||||
[](https://travis-ci.org/jiniannet/jntemplate)
|
||||
[](https://ci.appveyor.com/project/jiniannet/jntemplate)
|
||||
[](https://www.nuget.org/packages/JinianNet.JNTemplate/)
|
||||
[](https://github.com/jiniannet/jntemplate/stargazers)
|
||||
[](https://raw.githubusercontent.com/jiniannet/jntemplate/master/License.txt)
|
||||
|
||||
19
appveyor.yml
19
appveyor.yml
@@ -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
|
||||
@@ -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);
|
||||
//}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user