我想创建运行时类,但是当使用 Stimulsoft.Report.Dictionary 的属性 [StiAlias("id")] 时;发送错误:
[0] = (1,101):错误 CS0012:类型“属性”是在未引用的程序集中定义的。您必须添加对程序集“netstandard,Version=2.1.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用。
public object CreateClassRunTime()
{
string strClass =
@"using System; " +
//"using System.Collections.Generic;" +
"using Stimulsoft.Report.Dictionary;" +
"namespace VModel { public class AddressViewTest { " +
"[StiAlias(\"id\")]" +
"public int id { get; set; }" +
" public int? updUser { get; set; } } }";
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(strClass);
string assemblyName = Path.GetRandomFileName();
var refPaths = new[] {
typeof(object).Assembly.Location,
typeof(System.ComponentModel.DataAnnotations.DisplayAttribute).Assembly.Location,
typeof(System.Runtime.AssemblyTargetedPatchBandAttribute).Assembly.Location,
typeof(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo).Assembly.Location,
typeof(Stimulsoft.Report.Dictionary.StiAliasAttribute).GetTypeInfo().Assembly.Location,
};
MetadataReference[] references = refPaths.Select(r => MetadataReference.CreateFromFile(r)).ToArray();
CSharpCompilation compilation = CSharpCompilation.Create(
assemblyName,
syntaxTrees: new[] { syntaxTree },
references: references,
options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
object instance = null;
try
{
byte[] image = null;
using (var ms = new MemoryStream())
{
EmitResult result = compilation.Emit(ms);
if (!result.Success)
{
Console.Write(result.Diagnostics.First().GetMessage());
}
image = ms.ToArray();
//Assembly assembly = AssemblyLoadContext.Default.LoadFromStream(ms);
//instance = assembly.CreateInstance("VModel.AddressViewTest");
}
Assembly assembly = null;
using (var stream = new MemoryStream(image))
assembly = System.Runtime.Loader.AssemblyLoadContext.Default.LoadFromStream(stream);
//var type = assembly.GetType("VModel.AddressViewTest");
instance = assembly.CreateInstance("VModel.AddressViewTest");
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
通过广告解决了错误:
var ns = Assembly.Load("netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51");
Run Code Online (Sandbox Code Playgroud)
和广告参考:
var refPaths = new[] {
ns.Location,
typeof(object).Assembly.Location,...
Run Code Online (Sandbox Code Playgroud)
}
通过添加解决了错误:
var ns = Assembly.Load("netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51");
Run Code Online (Sandbox Code Playgroud)
和广告参考:
var refPaths = new[] {
ns.Location,
typeof(object).Assembly.Location,...}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |