Как я могу получить полное имя типа сборки? - PullRequest
4 голосов
/ 14 января 2009

Как я могу сгенерировать полное имя типа сборки?

Например, при настройке поставщика членства мне нужно было бы указать имя типа, квалифицированного для сборки, для «SqlMembershipProvider» (в этом примере я скопировал нижеприведенную конфигурацию откуда-то) в атрибут «type».

Как вы генерируете эту сборку с полным именем типа? Нужно ли вводить его каждый раз вручную, проверяя тип сборки?

<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider"
           type="System.Web.Security.SqlMembershipProvider,
           System.Web, Version=2.0.0.0,
           Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="LocalSqlServer"/>
  </providers>
</membership>

[ОБНОВЛЕНИЕ] : Более простая версия PowerShell

PS>([System.String]).AssemblyQualifiedName
System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Ответы [ 5 ]

8 голосов
/ 14 января 2009

Это удобный удобный инструмент (расширение оболочки с исходным кодом) для копирования полного имени в буфер обмена нажатием правой кнопки мыши на любой сборке.

Обновление : После просмотра комментария от dance2die подумал о том, чтобы собрать пример скрипта powershell для экспорта имени типа в файл csv.

> [System.Reflection.Assembly]::LoadWithPartialName("System.Web")

> [System.Web.Security.SqlMembershipProvider] | select {$_.UnderlyingSystemType.AssemblyQualifiedName } | export-csv c:\typenames.csv

Используя C #, если вы хотите сгенерировать квалифицированное имя типа сборки со всеми установленными ссылками, легко построить тестовый сценарий, используя отражение ..

using System;
using System.Reflection;
........

Type ty = typeof(System.Web.Security.SqlMembershipProvider);
string fullname = ty.AssemblyQualifiedName;
//"System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
3 голосов
/ 14 января 2009

Самый простой способ найти эту информацию - использовать Reflector , загрузить сборку и скопировать Name из манифеста сборки. Информация о манифесте будет отображаться на нижней панели Reflector, если ваша сборка выбрана в окне выше.

1 голос
/ 05 марта 2015

хорошо, просто используйте это, как писал Гульзар Назим

$ String typeName = typeof (AssemblyName.ClassName) .AssemblyQualifiedName);

, которые дают вам полное имя, которое вы можете использовать в type.getType (); Это работает со мной и больше не ноль

0 голосов
/ 15 ноября 2016

используйте тип добавления в вашей команде:

add-type -assemblyname "system.example"
0 голосов
/ 14 января 2009

AFAIK Полностью определенное имя типа состоит из имени класса и подписи сборки. Я не думаю, что вы можете создать его ...

Типом является пространство имен.

Версия, которую вы можете установить в AssemblyInfo.cs (удалите *, чтобы сохранить то же самое)

Токен открытого ключа, который вы задали в свойствах проекта.

Это то, что я помню

Другой способ получить квалифицированное имя сборки:

class Program
    {
        static void Main(string[] args)
        {
            string assemblyPath = args[0];
            Assembly loadedAssembly = Assembly.LoadFrom(assemblyPath);
            Module[] modules = loadedAssembly.GetModules();
            Console.WriteLine("Assembly: " + loadedAssembly.GetType().Name);
            foreach (Module module in modules)
            {
                Console.WriteLine("Module: {0}\nFullyQualifiedName: {1}", module.Name, module.FullyQualifiedName);
                Type[] types = module.GetTypes();
                foreach (Type type in types)
                {
                Console.WriteLine("Type: {0}\n FullName: {1}", type.Name, type.FullName);    
                }
            }
            Console.ReadLine();
        }
    }
...