Добавить ссылку на файл visual studio
Я использую StreamReader для динамической замены содержимого в шаблоне HTML. HTML-файл был импортирован в мой проект.
Прямо сейчас мне приходится ссылаться на HTML-файл в статическом месте на моем устройстве dev, потому что я не могу найти правильный синтаксис для ссылки на него после его импорта в мой проект VS.
Как мне обратиться к файлу без использования абсолютного пути?
Текущая реализация для справки:
4 ответа
Я нашел два решения для этого:
Если вам все равно, виден ли внешний файл в каталоге сборки / installdir вашего приложения:
Если вы хотите, чтобы ваш внешний файл был невидимым после компиляции:
Обратите внимание, что второе решение требует добавления внешнего файла и изменения действия сборки на «Встроенный ресурс» в меню свойств этого файла в Visual Studio.
Вы можете добавить его как встроенный ресурс и извлечь его таким образом.
За ваш комментарий
Есть два основных способа сделать это. В настольном приложении текущий каталог .exe устанавливается в каталог, из которого он запускается по умолчанию. Если это не изменилось путем запуска .exe с помощью ярлыка со специальными настройками или с помощью другого процесса, использующего специальную функцию, это должно быть значение по умолчанию. Если это так, вы можете просто использовать относительный путь. Например, если у вас есть файл с именем «data.txt» в папке с именем «вещи» внутри папки с именем «вещи» в том же каталоге, что и ваше приложение, вы можете просто указать относительный путь «вещи / вещи / данные». txt "напрямую, и Windows решит это за вас.
Если по какой-то причине вам нужно подняться «вверх» из каталога приложения, вы можете использовать «..» для представления этой родительской папки каталога. Поэтому «../data.txt» будет искать в папке, в которой содержится , текущий каталог для файла с именем «data.txt».
Вы также можете изменить текущий каталог приложения, когда он станет каталогом .exe, и затем ссылаться на все по относительному пути, как в первом примере.
Одна распространенная вещь, которую я видел, - это поместить местоположение файла в файл конфигурации. Это позволяет изменить местоположение файла по желанию без перекомпиляции.
Перед написанием кода для внешних компонентов или подключенных служб необходимо включить в проект ссылки на них. По сути, ссылка — это запись в файле проекта, которая содержит сведения, необходимые Visual Studio для поиска компонента или службы.
Чтобы добавить ссылку, в обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости и выберите команду Добавить ссылку. Вы также можете щелкнуть узел проекта правой кнопкой мыши и выбрать пункт Добавить > Ссылка. Дополнительные сведения см. в разделе Практическое руководство. Добавление и удаление ссылок.
Вы можете добавить ссылку на следующие типы компонентов и служб:
Приложения универсальной платформы 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. Они создаются на вкладке Обзор диспетчера ссылок. Ссылку на файл следует использовать в случае, если имеется лишь сборка или компонент, но не проект, который создает ее в качестве выходных данных.
когда я добавляю файл из другого проекта Visual Studio 2012 в мой текущий проект, используя опцию "Добавить как ссылку" в диалоговом окне "Добавить существующий элемент". Ссылка на файл прекрасно создана, и все в порядке.
когда я повторяю тот же трюк для существующего файла в то же самое проект VS2012 (но находится в другой папке) ссылка не будет создана. Visual Studio просто игнорирует действие. Почему это невозможно? Есть ли обходной путь для этого, поэтому я могу добавить ссылки на файлы в том же проекте?
Справочная информация: я хочу использовать пакеты NuGet и его механизм обновления, но NuGet просто сбрасывает все в структуру папок (например, папки "скрипты" и "содержимое"), которые я не хочу использовать. Я использую папку "libs" для внешних вещей. Но когда я перемещаю импортированные файлы NuGet, он нарушает механизм обновления, поэтому я хочу создать ссылки на файлы (ниже папки libs) в импортированные файлы, расположенные в папке "скрипты" и т. д.
Я уже пытался вручную редактировать .файл csproj, но определения ссылок по-прежнему игнорируются. Единственное решение, которое я могу придумать-это создать другой проект для пакетов NuGet и добавить ссылки на эти файлы в мой проект, но мне кажется немного перебор.
файл csproj-это просто файл msbuild, сообщающий процессу сборки, какие файлы и ссылки составляют проект и что делать с точки зрения сборки и т. д.
Если вы посмотрите, как собран файл csproj, вы заметите, что есть элементы ItemGroup. Одной из функций этих элементов ItemGroup является объединение файлов. В" группе файлов " каждый элемент (помеченный как Compile или None или что-то еще) ссылается на файл с атрибутом Include, например Include= " filename.доб." При добавлении файла в решение будет создан один из этих элементов с атрибутом Include, соответствующим пути к файлу относительно проекта. Прежде чем это сделать, он проверяет, находится ли файл с соответствующим путем уже в проекте, и игнорирует его, если это так.
Итак, вы видите, что вы пытаетесь добавить дубликат файла, а VS не позволяет что.
теперь, что касается обхода. Если вы используете символическую ссылку, это можно сделать. В окне команды введите следующую команду:
где Link указывает новое имя символьной ссылки, а Target указывает путь (относительный или абсолютный), на который ссылается Новая ссылка.
затем вы сможете добавить файл в свой проект по мере необходимости.
Вы можете редактировать .файл csproj. Например, замените
новый путь будет скрыт в обозревателе решений, но он будет скопирован (протестирован в VS2015 CTP6)
Диалоговое окно "Диспетчер ссылок"
В левой части диалогового окна "Диспетчер ссылок" отображаются различные категории в зависимости от типа проекта:
Сборки с подгруппами Платформа и Расширения.
COM содержит список всех COM-компонентов, ссылки на которые можно добавить.
Проекты
Общие проекты
Windows с подгруппами Ядро и Расширения. Для просмотра ссылок в Windows SDK и пакетах SDK расширений можно использовать Обозреватель объектов.
Обзор с подгруппой последних ссылок.
При разработке проектов С++ элемент Обзор может не отображаться в диалоговом окне "Диспетчер ссылок".
Добавление ссылки
В обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости и выберите команду Добавить ссылку. Вы также можете щелкнуть узел проекта правой кнопкой мыши и выбрать пункт Добавить > Ссылка.
Будет открыт Диспетчер ссылок со списком доступных ссылок по группам.
Укажите ссылки, которые требуется добавить, а затем нажмите кнопку ОК.
В обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости, после чего выберите Добавить ссылку на проект или Добавить общую ссылку на проект, или Добавить ссылку COM. (Можно щелкнуть правой кнопкой мыши узел проекта и выбрать пункт Добавить из всплывающего меню, чтобы выбрать эти параметры.)
Будет открыт Диспетчер ссылок со списком доступных ссылок по группам.
Укажите ссылки, которые требуется добавить, а затем нажмите кнопку ОК.
Вкладка "Сборки"
При добавлении вручную ссылки на любое из пространств имен EnvDTE (EnvDTE, EnvDTE80, EnvDTE90, EnvDTE90a или EnvDTE100) установите в окне Свойства для свойства ссылки Внедрить типы взаимодействия значение False. Задание для этого свойства значения True может привести к проблемам сборки, так как некоторые свойства EnvDTE не допускают внедрения.
Все проекты классических приложений содержат неявную ссылку на библиотеку mscorlib. Проекты Visual Basic содержат неявную ссылку на Microsoft.VisualBasic. Все проекты содержат неявную ссылку на System.Core, даже если она была удалена из списка ссылок.
Если тип проекта не поддерживает сборки, эта вкладка не отображается в диалоговом окне "Диспетчер ссылок".
Вкладка Сборки состоит из двух подразделов.
В разделе Платформа перечислены все сборки, из которых состоит целевая платформа.
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk location of assemblies]
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk location of assemblies]
- HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk location of assemblies]
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk location of assemblies]
Некоторые компоненты в списке могут не отображаться в зависимости от версии платформы проекта. Это может произойти в следующих случаях.
Компонент, использующий новую версию платформы, не совместим с проектом, нацеленным на более раннюю версию платформы.
Сведения об изменении целевой версии платформы для проекта см. в статье Общие сведения о настройке для платформы.
Не следует добавлять ссылки на выходные файлы другого проекта того же решения, поскольку это может привести к ошибкам компиляции. Вместо этого следует создавать ссылки между проектами, используя вкладку Проекты диалогового окна Добавление ссылки. Это позволит упростить коллективную разработку за счет более эффективного управления библиотеками классов, создаваемыми в проектах. Дополнительные сведения см. в статье Устранение неполадок неработающих ссылок.
Чтобы отобразить сборку в диалоговом окне "Добавление ссылки"
Переместите или скопируйте сборку в одно из следующих расположений.
Каталог текущего проекта. (Можно найти эти сборки, используя вкладку Обзор .)
Другие каталоги проектов в одном решении. (Можно найти эти сборки, используя вкладку Проекты.)
Установите раздел реестра, определяющий положение отображаемых сборок.
Для 32-разрядной операционной системы добавьте один из следующих разделов реестра.
Для 64-разрядной операционной системы добавьте один из следующих разделов реестра в 32-разрядный куст реестра.
<AssemblyLocation> является каталогом сборок, которые требуется отображать в диалоговом окне Добавить ссылку, например C:\MyAssemblies.
Создание раздела реестра в узле HKEY_LOCAL_MACHINE позволяет всем пользователям видеть сборки в указанном расположении в диалоговом окне Добавить ссылку. Создание раздела реестра в узле HKEY_CURRENT_USER влияет только на настройки для текущего пользователя.
Вкладка "Проекты"
На вкладке Проекты указываются все совместимые проекты в текущем решении (в подразделе Решение).
Вкладка "Общие проекты"
Добавьте ссылку на общий проект на вкладке Общие проекты диалогового окна "Диспетчер ссылок". Общие проекты позволяют писать общий код, на который ссылается несколько различных проектов приложений.
Вкладка "Универсальная платформа Windows"
Вкладка Универсальная платформа Windows содержит список всех пакетов SDK, относящихся к платформам, на которых работают операционные системы Windows. Эта вкладка имеет две подгруппы: Ядро и Расширения.
Подгруппа "Ядро"
Проекты универсального приложения для Windows по умолчанию имеют ссылку на пакет SDK универсальной платформы Windows. Соответственно, в подгруппе Ядро в диспетчере ссылок не перечисляются никакие сборки из пакета SDK универсальной платформы Windows.
Подгруппа "Расширения"
В разделе Расширения перечислены пользовательские пакеты SDK, расширяющие целевую платформу Windows.
Пакет SDK — это коллекция файлов, которая обрабатывается Visual Studio как единый компонент. На вкладке Расширения пакеты SDK, относящиеся к проекту, из которого было открыто диалоговое окно "Диспетчер ссылок", указываются как отдельные записи. При добавлении в проект все содержимое SDK используется Visual Studio таким образом, что пользователю не нужно принимать никаких дополнительных мер для добавления содержимого SDK в IntelliSense, на панель элементов, в конструкторы, обозреватель объектов, средства сборки, развертывания, отладки и упаковки.
Сведения об отображении SDK на вкладке Расширения см. в статье Создание средств разработки программного обеспечения.
Если проект ссылается на пакет SDK, зависящий от другого пакета SDK, Visual Studio не будет использовать второй пакет SDK, пока вы вручную не зададите ссылку на него. Когда пользователь выбирает пакет SDK на вкладке Расширения, открывается диалоговое окно "Диспетчер ссылок", которое помогает определить зависимости SDK, перечислив их в области сведений.
Если тип проекта не поддерживает расширения, эта вкладка не отображается в диалоговом окне "Диспетчер ссылок".
Вкладка COM
Если тип проекта не поддерживает COM, эта вкладка не отображается в диалоговом окне "Диспетчер ссылок".
Обзор
Кнопка Обзор позволяет осуществлять поиск компонента в файловой системе.
Не следует добавлять ссылки на выходные файлы другого проекта того же решения, поскольку это может привести к ошибкам компиляции. Вместо этого следует создавать ссылки между проектами, используя вкладку Решение диалогового окна "Диспетчер ссылок". Это позволит упростить коллективную разработку за счет более эффективного управления библиотеками классов, создаваемыми в проектах. Дополнительные сведения см. в статье Устранение неполадок неработающих ссылок.
Невозможно добавить SDK в проект с помощью кнопки "Обзор". С помощью кнопки "Обзор" можно добавить в проект только файл (например, сборку или файл WinMD).
При указании ссылки на файл WinMD предполагается, что файлы <FileName>.winmd, <FileName>.dll и <FileName>.pri находятся рядом. При указании ссылки на файл WinMD в следующих сценариях неполный набор файлов копируется в выходной каталог проекта и, следовательно, происходят сбои сборки и выполнения.
Компонент на базе машинного кода. Проект на базе машинного кода создает по одному файлу WinMD для каждого не связанного с другими набора пространств имен и по одному файлу DLL с реализацией. Файлы WinMD будут иметь разнородные имена. При указании ссылки на такой файл компонента на базе машинного кода MSBuild не определит, что файлы WinMD с разнородными именами относятся к одному компоненту. Следовательно, будут скопированы только файлы <FileName>.dll и <FileName>.winmd с одинаковыми именами, и возникнет ошибка времени выполнения. Чтобы обойти эту проблему, нужно создать пакет SDK расширения. Дополнительные сведения см. в статье Создание средств разработки программного обеспечения.
Использование элементов управления. Элемент управления XAML состоит по крайней мере из следующих файлов: <FileName>.winmd, <FileName>.dll, <FileName>.pri, <XamlName>.xaml и <ImageName>.jpg. Когда проект будет собран, файлы ресурсов, связанные со ссылкой на файл, не будут скопированы в выходной каталог проекта, а будут скопированы только файлы <FileName>.winmd, <FileName>.dll и <FileName>.pri. При этом в журнал будет занесена ошибка сборки, указывающая пользователю на отсутствующие ресурсы <XamlName>.xaml и <ImageName>.jpg. Чтобы сборка прошла успешно, пользователь должен вручную скопировать эти файлы ресурсов в выходную папку проекта для сборки и отладки (выполнения). Для решения этой проблемы создайте пакет SDK расширения, следуя инструкциям в статье Создание средств разработки программного обеспечения, или измените файл проекта, добавив в него следующее свойство:
При добавлении этого свойства сборка может выполняться медленнее.
Последние
Элементы Сборки, COM, Windows и Обзор поддерживают вкладку Последние, содержащую список компонентов, которые были недавно добавлены в проекты.
Поиск
Панель поиска в диалоговом окне "Диспетчер ссылок" работает с текущей активной вкладкой. Например, если пользователь вводит в области поиска запрос "System", когда открыта вкладка Решение, поиск не вернет результаты, если решение не содержит проекта, в имени которого есть слово "System".
Я изучил это с трудом, после многих исследований, и создал цель AfterBuild, чтобы помочь облегчить этот процесс. Однако при добавлении файла все еще нужно выполнить ручную работу.
2) Выберите файл для добавления, нажав на него ONCE (не дважды щелкните).
3) Нажмите стрелку рядом с кнопкой "Добавить" и выберите "Добавить как ссылку".
В настоящий момент это ничего не сделает. Файл не будет скопирован в любую папку (Debug и Publish). Он просто добавлен в проект.
4) Щелкните правой кнопкой мыши в файле и откройте "Свойства".
5) Изменение: "Построить действие" на "Контент" "Копировать в каталог вывода" на "Копировать всегда"
В это время файл будет скопирован в папку вывода публикации (в любом месте, которое мы определяем при публикации). Однако, когда мы отлаживаем локально (F5), это не будет работать, потому что файл не скопирован в локальную папку "Утилиты" на базе кода.
6) Сохраните изменения в Visual Studio, выбрав "Сохранить все". Это значит, что файл ".csproj" сохраняется, поскольку мы внесли в него изменения, и теперь мы отредактируем его вручную.
7) Откройте ".csproj" в Notepad ++.
8) Добавьте файл в событие "BeforeBuild" (здесь мое):
9) У меня есть событие AfterBuild для режима Release, которое автоматически публикует проект для меня, так что файлы идут непосредственно в папку вывода, которую я хочу:
10) Сохраните файл в Notepad ++ и перезагрузите его в Visual Studio.
Когда вы создадите проект, файл будет скопирован в папки "Отладка" и "Отпуск/публикация"!
Однако я хотел бы знать, есть ли более простой/интуитивный способ сделать это.
Вы можете сказать, что это будет исправлено путем изменения выходной папки Debug так же, как и папки Release/Publish, чтобы файлы были там после первого опубликованного вами. Однако, обратите внимание, что есть и ошибка. Если я использую папку вывода, отличную от "bin", файлы aspx будут жаловаться на то, что они не смогут найти сборки. Даже если я установил "Копировать в выходной каталог" в "Копировать всегда", он будет жаловаться, что "Global.asax.cs" не найден.
См. следующие вопросы:
Является ли это исправлено/улучшено в новых версиях Visual Studio?
Читайте также: