Вызовите Activator.CreateInstance в классе dll-intance, который находится внутри Asp.Net App_Code - PullRequest
1 голос
/ 15 апреля 2010

Помогите, вот идея:

External.dll
IMyClass NewCreated = (IMyClass)Activator.CreateInstance(Namespace.MyClass).UnWrap();

-----------------------------------------

Asp.Net WebSite
    App_Code
      Namespace.MyClass.cs
    Bin
      External.dll

Это вообще возможно?

Я пробовал много возможных комбинаций, таких как:

Assembly.GetCallingAssembly().CreateInstance("Namespace.MyClass")
Activator.CreateInstance(AppDomain.CurrentDomain,"Namespace","Namespace.MyClass")
Assembly.GetExecutingAssembly().CreateInstance("Namespace.MyClass")

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Вы можете использовать свойство BuildManager.CodeAssemblies , чтобы перечислить все имена сборок, которые были скомпилированы в каталоге App_Code. Возможно, вы сможете выполнить то, что вам нужно, таким образом.

Проблема с App_Code заключается в том, что все динамически компилируется в сборку, которая по своей природе является временной. Это идет вместе с именем временной сборки. Это делает невозможным жесткое кодирование имени сборки или пути.

0 голосов
/ 19 мая 2014

Нет необходимости использовать свойство BuildManager.CodeAssemblies для получения списка всех имен сборок. Вместо этого используйте:

type = "Namespace.MyClass, App_Code" для ссылки на класс.

...