Как загрузить тип из другой сборки в веб-приложении? - PullRequest
0 голосов
/ 21 июля 2011

У меня есть этот существующий код:

    Private Function GetTypeFromName(ByVal FullTypeName As String, ByVal AssemblyName As String) As Type
        Dim DirStr = New FileInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).DirectoryName
        Dim Asm = [Assembly].LoadFile(DirStr & "\" & AssemblyName & ".dll")
        Return Asm.GetType(FullTypeName)
    End Function

Результатом вызова этой подпрограммы является тип, который затем будет создан и использован в приложении.

ПредыдущийИспользование и предположения

Этот код ранее использовался в приложении Winforms для определения типа на основе данных, загруженных из файла конфигурации и переданных в эту функцию.

Обычно запрашиваемая сборка выполняетсяна него уже ссылается приложение, но это не всегда так.

Как вы можете видеть, код в настоящее время ожидает, что имя сборки будет передано без суффикса ".dll" или пути, и далее предполагается, чтонаходиться в той же папке, что и исполняющая сборка.

Эти предположения были верны до сих пор.

Все меняется

Теперь я выполняюэтот код из Web App , и кажется, что папка исполняемой сборки ...

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\<assemblyName>\ae5faeca\7d2a827f\assembly\dl3\212260f8\0af7415f_9747cc01\<assemblyName>.DLL

... и далее в этой папке нет других dll.

Я ожидал, что эта папка будет папкой bin моего веб-приложения и что все остальные сборки будут доступны оттуда.

Итак ... Как загрузить тип из другой сборки, когдав веб-приложении?

1 Ответ

1 голос
/ 21 июля 2011

Что вам нужно сделать, это убедиться, что сборка, которую вы пытаетесь загрузить, находится в каталоге веб-сайтов (bin, app_data и т. Д.).

После этого вам нужно выполнить HttpServerUtility.MapPath для каталога.вы ожидаете, что сборка будет. Как только вы это сделаете, вы сможете загрузить ее.

Private Function GetTypeFromName(ByVal FullTypeName As String, ByVal AssemblyName As String) As Type
    Dim DirStr = HttpServerUtility.MapPath( "/bin" ) //assuming you are loading from the bin directory of your website
    Dim Asm = [Assembly].LoadFile(DirStr & "\" & AssemblyName & ".dll")
    Return Asm.GetType(FullTypeName)
End Function

MSDN для HttpServerUtility http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath.aspx

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...