Создайте экземпляр C# универсального типа, используя <cfobject> в реализации ColdFusion BlueDragon.NET

Используя реализацию ColdFusion в NewDlangon BlueDragon.NET, мы можем создавать экземпляры объектов C# .NET с использованием тега Cold Fusion. Например:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.ArrayList">

Однако в одном случае нам нужно создать экземпляр универсального типа. Это работает для внутренних типов, таких как System.Int32:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.Generic.List`1[[System.Int32]]">

Но при использовании нашего собственного класса, квалифицированного на ассемблере, вроде следующего:

namespace Foo.Bar.Bam
{
    public class MyClassName
}

компилируется в сборку Foo.Bar.dll и использовал вот так:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.Generic.List`1[[Foo.Bar.Bam.MyClassName,Foo.Bar]]">

он завершается с "Внутренней ошибкой сервера BlueDragon" со следующей трассировкой стека:

java.lang.ClassNotFoundException: Could not load file or assembly 'Foo.Bar]]' or one of its dependencies. The system cannot find the file specified.
   at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.AppDomain.Load(String assemblyString)
   at com.nary.util.ClassUtils.forName(String className)
   at com.naryx.tagfusion.cfm.tag.cfOBJECT.render(cfSession session)
   at com.naryx.tagfusion.cfm.tag.cfTag.coreRender(cfSession _Session)
   at com.naryx.tagfusion.cfm.engine.cfSession.onRequest(cfFile requestFile)
   at com.naryx.tagfusion.cfm.engine.cfEngine.service(cfSession _Session)

Без квалификации сборки она завершается с ошибкой CFML:

Failed to load class, System.Collections.Generic.List`1[[Foo.Bar.Bam.MyClassName]]

Есть ли способ создать экземпляр универсального типа, используя?

1 ответ

Вы должны указать название вашей сборки (dll), а не ключевое слово Assembly,

Дано:

namespace Me
{
   public class Foo { }
}

и компиляция в MyStuff.Dll; класс будет

class="System.Collections.Generic.List`1[[Me.Foo, MyStuff]]">
Другие вопросы по тегам