Как открыть ссылки в visual studio

Обновлено: 06.07.2024

Перед написанием кода для внешних компонентов или подключенных служб необходимо включить в проект ссылки на них. По сути, ссылка — это запись в файле проекта, которая содержит сведения, необходимые Visual Studio для поиска компонента или службы.

Чтобы добавить ссылку, в обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости и выберите команду Добавить ссылку. Вы также можете щелкнуть узел проекта правой кнопкой мыши и выбрать пункт Добавить > Ссылка. Дополнительные сведения см. в разделе Практическое руководство. Добавление и удаление ссылок.

Добавление ссылки в Visual C++

Вы можете добавить ссылку на следующие типы компонентов и служб:

Приложения универсальной платформы Windows

другие сборки или библиотеки классов проектов в том же решении;

Ссылки на приложения UWP

Ссылки на проекты

Проекты универсальной платформы Windows (UWP) могут создавать ссылки на другие проекты UWP в решении либо на двоичные файлы или проекты, ориентированные на Windows 8.1, при условии, что эти проекты не используют интерфейсы API, которые являются устаревшими в Windows 10 и более поздних версиях. Более подробную информацию см. в разделе Перенос приложения из среды выполнения Windows 8 в UWP.

Если вы решили изменить целевую платформу проектов Windows 8.1 на Windows 10 или более поздней версии, ознакомьтесь со статьей Перенос, миграция и обновление проектов Visual Studio.

Справочник по пакетам SDK расширений

Если выяснится, что пакет SDK расширений, на который ссылается ваше приложение, не поддерживается, то вы должны выполнить следующие действия.

Посмотреть имя проекта, который вызывает ошибку. Платформа, для которой предназначен этот проект, указывается в скобках рядом с именем проекта. Например, MyProjectName (Windows 8.1) означает, что проект MyProjectName предназначен для платформы Windows 8.1.

Перейдите на сайт поставщика неподдерживаемого пакета SDK расширений и установите версию пакета SDK расширений с зависимостями, совместимыми с версией платформы, для которой предназначен ваш проект.

Если проект предназначен исключительно для Windows 10 и установленный в предыдущем шаге пакет SDK расширений имеет зависимость от пакета среды выполнения Microsoft Visual C++, то совместимой с Windows 10 версией этого пакета является v14.0, которая устанавливается вместе с Visual Studio.

Если установленный на предыдущем шаге пакет SDK расширений имеет зависимости от других пакетов SDK расширений, перейдите на сайты поставщиков, являющихся владельцами зависимостей, и установите версии этих зависимостей, совместимые с версией платформы, для которой предназначен ваш проект.

Перезапустите Visual Studio и откройте ваше приложение.

Щелкните правой кнопкой мыши узел Ссылки или Зависимости в проекте, который вызвал ошибку, и выберите команду Добавить ссылку.

Добавление ссылки во время разработки

При создании ссылки на сборку в проекте Visual Studio ищет сборку в следующих расположениях:

Каталог текущего проекта. (Можно найти эти сборки, используя вкладку Обзор .)

Другие каталоги проектов в одном решении. (Вы можете найти эти сборки на вкладке Проекты .)

  • Все проекты содержат неявную ссылку на библиотеку mscorlib.
  • Все проекты содержат неявную ссылку на System.Core , даже если System.Core была удалена из списка ссылок.
  • Проекты Visual Basic содержат неявную ссылку на Microsoft.VisualBasic.

Ссылки на общие компоненты во время выполнения

По умолчанию для свойства CopyLocal задается значение False , если сборка или компонент находится в глобальном кэше сборок или является компонентом платформы. В противном случае задается значение True. Ссылки проектов на проекты всегда имеют значение True.

Ссылки проектов на проекты

Ссылки проектов на проекты — это ссылки на проекты, которые содержат сборки. Вы добавляете их на вкладке Проекты диалогового окна "Диспетчер ссылок". Visual Studio может найти сборку, если задан путь к проекту.

Ссылки на общий проект

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

Ссылки на файлы

Ссылки на файлы — это прямые ссылки на сборки вне контекста проекта Visual Studio. Они создаются на вкладке Обзор диспетчера ссылок. Ссылку на файл следует использовать в случае, если имеется лишь сборка или компонент, но не проект, который создает ее в качестве выходных данных.


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


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

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

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

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

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

public static IEnumerable< string > GetAssemblyFolders()<br/>

string [] valueNames = new [] < string .Empty, "All Assemblies In" >;<br/>
string [] keyNames = new []<br/>

@"SOFTWARE\Microsoft\.NETFramework\AssemblyFolders" ,<br/>
@"SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyFolders" <br/>
>;<br/>
var result = new HashSet< string >();<br/>
foreach ( var keyName in keyNames)<br/>

using ( var key = Registry.LocalMachine.OpenSubKey(keyName))<br/>

if (key != null )<br/>
foreach ( string subkeyName in key.GetSubKeyNames())<br/>

using ( var subkey = key.OpenSubKey(subkeyName))<br/>

if (subkey != null )<br/>

foreach ( string valueName in valueNames)<br/>

string value = (subkey.GetValue(valueName) as string ?? string .Empty).Trim();<br/>
if (! string .IsNullOrEmpty( value ))<br/>
result.Add( value );<br/>
><br/>
><br/>
><br/>
><br/>
><br/>
><br/>
return result;<br/>
><br/>

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

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

public static string GetVS9InstallDirectory()<br/>

var keyNames = new string []<br/>

@"SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VS" ,<br/>
@"SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" <br/>
>;<br/>
foreach ( var keyName in keyNames)<br/>

using ( var key = Registry.LocalMachine.OpenSubKey(keyName))<br/>

if (key != null )<br/>
return key.GetValue( "ProductDir" ).ToString();<br/>
><br/>
><br/>
return null ;<br/>
><br/>

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

using ( var dc = new StatsDataContext())<br/>

var dirs = new HashSet< string >();<br/>
dirs.Add( @"C:\Program Files (x86)\JetBrains\ReSharper\v4.5\Bin" );<br/>
foreach ( var dir in GetAssemblyFolders()) dirs.Add(dir);<br/>
dirs.Add(Path.Combine(GetVS9InstallDirectory(), @"Common7\IDE\PublicAssemblies" ));<br/>
foreach ( string dir in dirs.Where(Directory.Exists))<br/>

string [] files = Directory.GetFiles(dir, "*.dll" );<br/>
var entries = new HashSet<Namespace>();<br/>
foreach ( string file in files)<br/>

var ns = AddNamespacesFromFile(file);<br/>
foreach ( var n in ns)<br/>
entries.Add(n);<br/>
><br/>
dc.Namespaces.InsertAllOnSubmit(entries);<br/>
><br/>
dc.SubmitChanges();<br/>
><br/>

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

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

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

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

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

protected override bool IsAvailableInternal()<br/>

items = EmptyArray<IBulbItem>.Instance;<br/>
var element = GetSelectedElement<IElement>( false );<br/>
if (element == null )<br/>
return false ;<br/>
var parent = element.ToTreeNode().Parent;<br/>
if (parent == null || parent.GetType().Name != "ReferenceName" || parent.Parent == null <br/>
|| string .IsNullOrEmpty(parent.Parent.GetText()))<br/>
return false ;<br/>
string s = parent.Parent.GetText();<br/>
if ( string .IsNullOrEmpty(s))<br/>
return false ;<br/>
var bulbItems = new HashSet<RefBulbItem>();<br/>
using ( var conn = new SqlConnection(<br/>
"Data Source=(local);Initial Catalog=Stats;Integrated Security=True" ))<br/>

conn.Open();<br/>
var cmd = new SqlCommand(<br/>
"select * from Namespaces where NamespaceName like '%" + s + "%'" , conn);<br/>
using ( var r = cmd.ExecuteReader())<br/>

int count = 0;<br/>
while (r.Read())<br/>

bulbItems.Add( new RefBulbItem(<br/>
provider,<br/>
r.GetString(2).Trim(),<br/>
r.GetString(3).Trim(),<br/>
r.GetString(4).Trim()));<br/>
count++;<br/>
><br/>
if (count > 0)<br/>

items = System.Linq.Enumerable.ToArray(<br/>
System.Linq.Enumerable.ThenBy(<br/>
System.Linq.Enumerable.OrderBy(<br/>
bulbItems,<br/>
i => i.AssemblyName),<br/>
i => i.AssemblyVersion));<br/>
return true ;<br/>
><br/>
><br/>
><br/>
return false ;<br/>
><br/>

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

protected override void ExecuteBeforeTransaction(ISolution solution,<br/>
JetBrains.TextControl.ITextControl textControl, IProgressIndicator progress)<br/>

var project = provider.Project;<br/>
if (project == null ) return ;<br/>
var fileSystemPath = FileSystemPath.TryParse(path);<br/>
if (fileSystemPath == null ) return ;<br/>
var assemblyFile = provider.Solution.AddAssembly(fileSystemPath);<br/>
if (assemblyFile == null ) return ;<br/>
var cookie = project.GetSolution().EnsureProjectWritable(project, out project, SimpleTaskExecutor.Instance);<br/>
QuickFixUtil.ExecuteUnderModification(textControl,<br/>
() => project.AddModuleReference(assemblyFile.Assembly),<br/>
cookie);<br/>
><br/>

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

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

Закладка References среды Visual Studio

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

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

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

Закладка Resources

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

Закладка Resources среды Visual Studio

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

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

Структура веб-страниц представлена на рисунке 1.

Shema

1 - Структура итогового веб-сайта

Цель: ознакомиться с Visual Studio Code, а так же создать страницу с дизайном для всего сайта.

– Исследовать рабочую область.
– Научиться создавать новую страницу, используя содержимое HTML5, CSS.
– Научиться сохранять документ.
– Научиться изменять название страницы и текстовые заголовки.
– Научиться добавлять изображения на передний план и в качестве фоновых изображений.

В результате выполнения данного урока у вас должна получиться такая веб-страница (рисунок 1.1):

lab1_1

Рисунок 1.1 - Предварительный просмотр веб-страницы

Подготовка к созданию проекта, изучение редактора Visual Studio Code. (Установка Visual Studio Code)

Для создания проекта "Юридическая контора "Советник"" нам понадобится рабочая папка под проект.
Создайте папку на локальном диске посредствам проводника или другого файлового менеджера.


Для реализации проекта в качестве редактора вы будете использовать современный инструмент - Visual Studio Code.
Visual Studio предлагает общедоступные инструменты и гибкость, необходимые для создания и развертывания современных веб-приложений.

– Запустите Visual Studio Code. В боковой панели навигации кликните по иконке страниц.(рисунок 1.2).

lab1_3

1.2 - Боковая панель

– В появившемся меню, кликните на кнопку Открыть папку и в открывшемся окне выберите созданную заранее папку Sovetnik. Кликните кнопку Выбор папки.

lab1_4

1.3 - Боковая панель. Выбранная папка


– Для создания первой страницы сайта design.html наведите мышку на область названия папки(проекта) SOVETNIK и кликните значок . В появившейся форме введите design.html

lab1_6

1.4 - Создан файл design.html

Наполнение папки Sovetnik

Для создания проекта, нам понадобятся дополнительные файлы: CSS, JS, мультимедиа.

– Для этого скачайте в созданную вами папку, папки и файлы из папки work_files.

lab1_9

1.5 - Папка Sovetnik

– Откройте редактор. Папки появились в навигационном меню проекта. Они будут задействованы позже.

lab1_10

1.6 - Название страницы

Создание дизайна сайта.

Для создания дизайна сайта нами будет подключен файл CSS, в котором указаны свойства для элементов HTML5. Изучение CSS в данном электронном учебном пособии не предусмотрен.

– Заполните файл design.html согласно стандартной структуре HTML5 документа, как на рисунке 1.7:

lab1_7

1.7 - Стандартная структура

– Между тегами title введите название страницы ЮК Советник (рисунок 1.8).

Shema

1.8 - Название страницы

– Следующим шагом будут meta и link данные. Между тегами head добавьте следующие строки (рисунок 1.9):

Shema

1.9 - Добавлены meta и link данные

Данным кодом вы к файлу design.html подключили css файл со свойствами для элементов HTML5, а так же meta name="viewport" для того ,что бы сообщить браузеру, что ваша страница предназначена для правильного поведения области просмотра как на персональных компьютерах ,так и на мобильных устройствах.

– Для отображения страницы как на примере, нужно прописать id для тэгов и разделительную полосу при помощи тега hr.

Shema

1.10 - Выделеные области нужно добавить на свою страницу.

– Добавим логотип на страницу. Логотип у вас используется в формате SVG, если же у пользователя поддерка SVG не предусмотрена браузером выводиться будет альтернативное изображения в формате PNG.
Вся область логотипа и подпись снизу будет обернута DIV с именем center для того, что бы все объекты внутри распологались по центру. Клик по картинке будет переводить вас на главную страницу сайта (рисунок 1.11).

Shema

1.11 - Код добавления логотипа на страницу.

Shema

1.12 - Логотип технологии SVG и формата PNG.

– Следующим шагом будет создание навигации на сайте. Стиль навигации уже прописан в CSS файле. Вам осталось добавить ссылки между тегоми nav. В конце добавим div clearfix. Clearfix - метод отмены действия float без изменения структуры HTML-документа (рисунок 1.13).

Shema

1.13 - Код ссылок для вставки навигации

– Добавьте копирайт в подвал сайта между тегами footer (рисунок 1.14).

Shema

1.14 - Добавлены meta и link данные

– Дизайн готов. Добавим обзац с текстом Контент, для визуального восприятия области для контента.

Shema

1.15 - Выделеные области нужно добавить на свою страницу.

Поздравляем! Вы создали свою первую веб-страницу на HTML5 (рисунок 1.16): добавили текст и цвета, добавили изображения и подключили CSS, а также быстро создали профессиональную веб-страницу. Вы выполнили предварительный просмотр страницы в браузере (рисунок 1.16).

lab1_16

1.16 - Предварительный просмотр веб-страницы

Контрольные вопросы

1. Какой редактор используется в уроках для редактирования страниц HTML5?
2. Между какими тегами размещается пара тегов ?
3. Какой метатег сообщает браузеру, что сайт предназначен для просмотра как на персональных компьютерах, так и на мобильных устройствах?
4. При добавлении логотипа была использована технология SVG, что будет отображаться браузером, если браузер не поддерживает SVG?
5. Между какими тегами распологаются ссылки навигационного меню сайта?

Читайте также: