Что перечисляется в секции references

Что перечисляется в секции references

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

c-sharp / terminology_intro

Users who have contributed to this file

1. Как в языке C# называют именованную последовательность инструкций 1 из 1 балла
Метод
2. Какие утверждения верны? 1 из 1 балла
Сборка — это как правило результат компиляции проекта
Solution (решение) может содержать несколько проектов
В проекте может быть более одного кодового файла
Разные проекты одного решения могут содержать классы в одном и том же пространстве имён
3. Что перечисляется в секции References (ссылки) проекта в Visual Studio (или других IDE) 0 из 1 балла
Сборки, классы которых доступны для использования в кодовых файлах проекта
4. Каково предназначение инструкции using в начале кодового файла? 1 из 1 балла
Избавляет программиста от необходимости указывать пространство имён перед именами классов данного пространства имён, сокращая код
5. Где найти exe-файл — результат компиляции моего проекта 1 из 1 балла
Скорее всего в подпапке bin/Debug папки вашего проекта
На самом деле путь можно настроить в свойствах проекта (контекстное меню на проекте)
  • © 2020 GitHub, Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Недавно я допилил одну проблему, которая меня уже очень давно достает. Суть ее в том, что диалог Add Reference в Visual Studio не нужен, если вы берете сборку из одного из тех мест, где их ищет студия. Не нужен он потому, что студия вполне могла бы сама проиндексировать все пространства имен в этих сборках и при написании using Biztalk дать мне возможность добавить ссылку автоматически. Поскольку студия это делать не умеет, пришлось ей помочь.

Идея сама по себе простая, и состоит из 2 х частей, а именно:

  • Нужно найти все важные сборки и проиндексировать все их пространства имен.
  • При наведении курсора на using , нужно сделать поиск всех возможных сборок и показать меню.

Индексирование

База для пространств имен и путям к файлам сборок делается за секунды. Единственный трюк – это использование Cecil вместо извращений вроде Assembly.ReflectionOnlyLoad() , которые пытаются подгрузить зависимости и ещё невесть что. Быстренько находим все типы, записываем их простнанства имен в HashSet , и засовываем все это в базу. Как? Об этом сейчас и поговорим.

Читайте также:  Программы и компоненты в виндовс 10 открыть

Во-первых, пути к файлам которые использует Add Reference находятся как минимум в 2 х местах – в реестре, и в папке PublicAssemblies. Чтобы найти те папки, которые указаны в реестре, я написал следующий код:

public static IEnumerable string > GetAssemblyFolders()

string [] keyNames = new []

var result = new HashSet string >();

foreach ( var keyName in keyNames)

using ( var key = Registry.LocalMachine.OpenSubKey(keyName))

foreach ( string subkeyName in key.GetSubKeyNames())

using ( var subkey = key.OpenSubKey(subkeyName))

if (subkey != null )

foreach ( string valueName in valueNames)

string value = (subkey.GetValue(valueName) as string ?? string .Empty).Trim();

if (! string .IsNullOrEmpty( value ))

Изначально у меня мало что работало, т.к. ключи на 32-битной и 64-битной системе разные. В очередной раз замечаю что с переходом на 64-битную систему начал писать более качественный код 🙂

Чтобы найти папку PublicAssemblies, нужно сначала найти где установлена Visual Studio:

public static string GetVS9InstallDirectory()

var keyNames = new string []

foreach ( var keyName in keyNames)

using ( var key = Registry.LocalMachine.OpenSubKey(keyName))

return key.GetValue( "ProductDir" ).ToString();

Имея список папок, можно в каждой искать все DLL-файлы и индексировать их. Помимо тех папок что всегда фигурируют в диалоге Add Reference, можно добавлять свои папки, что бывает удобно.

using ( var dc = new StatsDataContext())

var dirs = new HashSet string >();

dirs.Add( @"C:Program Files (x86)JetBrainsReSharperv4.5Bin" );

foreach ( var dir in GetAssemblyFolders()) dirs.Add(dir);

foreach ( string dir in dirs.Where(Directory.Exists))

string [] files = Directory.GetFiles(dir, "*.dll" );

var entries = new HashSet ();

foreach ( string file in files)

var ns = AddNamespacesFromFile(file);

foreach ( var n in ns)

Добавление происходит с помощью метода AddNamespacesFromFile() который, как я уже писал, использует Mono.Cecil.

private static IEnumerable AddNamespacesFromFile( string file)

HashSet result = new HashSet ();

var ad = AssemblyFactory.GetAssembly(file);

foreach (ModuleDefinition m in ad.Modules)

foreach (TypeDefinition type in m.Types)

if (type.IsPublic && ! string .IsNullOrEmpty(type.Namespace))

result.Add( new Namespace

// it’s okay, probably a non-.Net DLL
>

С наполнением базы на этом все. Далее можно пользоваться результатами, хотя я помимо этого сделал фоновую утилиту которая позволяет освежать данные и добавлять новые пути.

Читайте также:  Таймер с алиэкспресс инструкция

Использование

Не имея лучших вариантов, я реализовал добавление ссылок как context action для ReSharper. Идея простая – пользователь наводит курсор на слово Biztalk в строке using Biztalk; и видит магическое меню, при выборе элементов которого автоматически добавляется ссылка в проект.

Сам СА наследует от полезного класса CSharpContextActionBase , внутри которого кроме проверки а «применимость» ничего умного не происходит. Поиск по базе ведется с помощью простой выборки в стиле SELECT * from Namespaces where NamespaceName LIKE ‘%BizTalk%’ . Для базы в которой у вас будет пара тысяч элементов (ну, может 10 тысяч, если постараетесь), такой подход адекватен.

protected override bool IsAvailableInternal()

items = EmptyArray .Instance;

var element = GetSelectedElement ( false );

if (element == null )

var parent = element.ToTreeNode().Parent;

if (parent == null || parent.GetType().Name != "ReferenceName" || parent.Parent == null

string s = parent.Parent.GetText();

if ( string .IsNullOrEmpty(s))

var bulbItems = new HashSet ();

using ( var conn = new SqlConnection(

"Data Source=(local);Initial Catalog=Stats;Integrated Security=True" ))

var cmd = new SqlCommand(

"select * from Namespaces where NamespaceName like ‘%" + s + "%’" , conn);

using ( var r = cmd.ExecuteReader())

bulbItems.Add( new RefBulbItem(

Все интересное происходит в BulbItem ах, то есть желтых лампочках которые появляются в процессе вызова контекстного меню. Сама лампочка – это некий POCO который умеет в нужный момент добавить ссылку на определенную сборку.

protected override void ExecuteBeforeTransaction(ISolution solution,

JetBrains.TextControl.ITextControl textControl, IProgressIndicator progress)

var project = provider.Project;

if (project == null ) return ;

var fileSystemPath = FileSystemPath.TryParse(path);

if (fileSystemPath == null ) return ;

var assemblyFile = provider.Solution.AddAssembly(fileSystemPath);

if (assemblyFile == null ) return ;

var cookie = project.GetSolution().EnsureProjectWritable(project, out project, SimpleTaskExecutor.Instance);

Код выше удалось написать только с помощью члена команды JetBrains (planerist – спасибо!), т.к. у меня у самого не хватило усидчивости чтобы найти правильный способ.

Программы — Visual Studio — Свойства проекта: разделы References и Resources

Закладка References (только для языка Visual Basic)

Закладка References позволяет разработчику ссылаться на классы, принадлежащие к другим .NET-сборкам, проектам или библиотекам DLL. Как только проект или библиотека DLL добавлены в список ссылок, класс становится доступен либо по своему полному имени, включающему пространство имен, либо просто по имени, если пространство имен импортировано в исходный файл. На рисунке ниже показана закладка References для проекта, ссылающегося на множество сборок:

Читайте также:  Тест по ms dos

Одной из особенностей этой закладки, предназначенной для разработчиков программ на языке Visual Basic, является кнопка Unused References, позволяющая выполнять поиск ссылок, которые можно удалить. Кроме того, можно добавлять пути к ссылкам (reference path), что дает возможность включать все сборки, расположенные в данном месте.

Как только сборка добавлена в список ссылок, любой открытый класс, содержащийся в этой сборке, становится видимым в проекте. Если класс вложен в пространство имен (которое может быть вложенной иерархией), то для ссылки на класс необходимо указывать его полное имя. В языках Visual Basic и C# предусмотрен механизм импортирования пространств имен, чтобы на классы можно было ссылаться непосредственно. Раздел References позволяет осуществлять глобальный импорт пространств имен для классов, принадлежащих проекту, без явного импорта в файл класса.

Ссылки на внешние сборки могут быть ссылками на файл или проект. Ссылка на файл — это прямая ссылка на отдельную сборку. Такие ссылки создаются с помощью закладки Browse в диалоговом окне Add Reference. Ссылка на проект — это ссылка на отдельный проект в решении. Все сборки, создающиеся проектом, динамически добавляются как ссылки. Ссылки на проекты создаются с помощью закладки Project в диалоговом окне Add Reference.

Преимущество ссылки на проект заключается в том, что она создает зависимость между проектами в системе сборки. Зависимый проект может быть собран заново, если он был изменен с момента последней сборки проекта, который на него ссылается. Ссылка на файл не создает зависимости между сборками, поэтому возможна ситуация, когда проект, ссылающийся на файл, будет собран, а зависимый проект — нет. Однако это может создать проблемы в ссылающемся проекте, который ожидает другую версию зависимого проекта.

Закладка Resources

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

Этот интерфейс существенно облегчает работу с файлами ресурсов во время проектирования.

Ссылка на основную публикацию
Что означает значок лупа в телефоне самсунг
В Samsung galaxy S8 есть полезная функция для слабовидящих людей. Называется она экранная лупа. С ее помощью можно увеличивать отдельные...
Что делать если амино выдает ошибку
Все больше людей предпочитают проводить время за любимыми соцсетями. Лидерами с многомиллионной аудиторией продолжают оставаться: Вконтакте, Инстаграм, Одноклассники, Twitter, Faceebok...
Что значит импортировать изображения и видео
Администратор 26 Июнь 2017 Просмотров: 6241 Сегодня многие делают фотографические снимки на телефон – это быстро, удобно, к тому же...
Что перечисляется в секции references
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software...
Adblock detector