Пути ссылок на веб-сайты Visual Studio

В проектах веб-сайтов Visual Studio (в Visual Studio 2005 или более поздних версиях, а не в проектах веб-приложений, где все еще есть файл .csproj) как хранится справочная информация и можно ли управлять ее исходным кодом, не сохраняя скомпилированные двоичные файлы в системе управления версиями?

Если вы щелкните правой кнопкой мыши проект веб-сайта и выберите «Страницы свойств», на первом экране («Ссылки») будут перечислены все ссылки на проект.

Ссылки System. * Указаны как тип GAC, а другие файлы DLL могут быть указаны как BIN или Project.

Проблема возникает, когда вы включаете что-то в качестве ссылки на проект, а затем фиксируете это в системе управления версиями (для нас, Subversion, игнорируя файлы .dll и .pdb).

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
0
6 968
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вы ссылаетесь на .dll по имени файла на вкладке обзора, должен быть создан файл .refresh (вложенный в dll в BIN). Мы помещаем их в SVN, и он отлично работает (возможно, вам придется вручную отредактировать их, чтобы использовать относительные пути).

Ссылки, добавленные из вкладки .NET, добавляются в web.config.

Ссылки на проекты хранятся в файле решения (.sln). Откройте файл .sln, и вы увидите их в списке:

Project("{xxxxxxx-7377-xxxx-xxxx-BC803B73C61A}") = "XXXXXXX.Web", "XXXXXXX.Web", "{xxxxxxxx-BB14-xxxx-B3B6-8BF6D8BC5AFF}"
    ProjectSection(WebsiteProperties) = preProject
        TargetFramework = "3.5"
        ProjectReferences = "{xxxxxxxx-C3AB-xxxx-BBED-2055287036E5}|XXXXXX.Data.dll;
            ...

Спасибо чувак! У меня всегда были проблемы со ссылками на проекты, и я не замечал, что файл sln меняется, когда я добавляю ссылку на проект.

Piotr Perak 28.09.2011 17:23

Я использую copyprojectDll.ps1 powershell.

Моя структура папок ниже

  • КлассБиблиотеки
    ThirdParty
    Сайт / Bin
    КопироватьprojectDll.ps1
    Website.sln

ClassLibraries - это классы кода для моего проекта DAL .. Проект веб-сайта включает только веб-файлы, aspx, aspx.cs .. ThirdParty - это обязательные библиотеки, AjaxToolkit и т. д.

Компилирую ClassLibraries.sln Запускаю CopyprojectDll.ps1 После этого я использую Website.sln.

Ниже приведен образец файла PowerShell.

$ папки = @ (); $ папки + = "IB.Security" $ папки + = "Библиотеки классов / Core.Classes"

функция CopyDllsToWebBin ($ dll_files) { если ($ dll_files -eq $ null) { возвращаться; } $ targetfolder = "./Kod/bin/"

foreach($dll in $dll_files)
{

    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose
}

}

функция CopyDllsToThirdParty ($ dll_files) {

$ targetfolder = "./ThirdParty/"

foreach($dll in $dll_files)
{
    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose
}

}

$ dll_output_folder = "/ bin / debug";

foreach ($ папка в $ папках) { $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .dll -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .pdb -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .xml -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files) "Скопирована $ папка $ dll_output_folder"

}

$ dll_files = Get-ChildItem -Path "ThirdParty" -include * .dll -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path "ThirdParty" -include * .pdb -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .xml -Recurse | имя объекта сортировки CopyDllsToWebBin ($ dll_files)

«Скопировано ThirdParty»

датировать

Проекты «Веб-сайт» в Visual Studio - странная вещь. Они кажутся попыткой угодить традиционным веб-разработчикам, где «сайт» - это просто набор файлов в каталоге. Точно так же, когда вы создаете проект «Веб-сайт» в Visual Studio, настоящего файла «проекта» не существует, как в проектах C# есть файл .csproj. Однако есть еще файл решения (.sln). Обычно ссылки на сборку .dll сохраняются в файле проекта. Если у веб-сайта его нет, куда им идти?

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

Если вы добавляете ссылку на другой проект, то в файле решения .sln делается запись. В итоге это выглядит так:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;"

Ссылки на файловую систему

Если вы просмотрите файловую систему и добавите файл .dll, Visual Studio создаст файл «.refresh» с тем же именем в папке \ Bin. Этот файл представляет собой всего лишь однострочный текстовый файл, который указывает путь, из которого файл был загружен. Так, например, если бы я добавил «MyAssem.dll» из .... \ libs, а затем в папку Web Site \ Bin, я бы скопировал туда 2 файла: MyAssem.dll и MyAssem.dll.refresh. Файл .refresh будет содержать текст: «.... \ libs». При каждой сборке Visual Studio будет проверять путь в файле .refresh, и если там существует более новый .dll, он перезапишет тот, который находится в каталоге Bin.

Предупреждение: Visual Studio НЕ выдаст ошибку, если файл не существует там, где файл .refresh указывает его искать. Он просто продолжит использовать .dll, уже находящийся в папке \ Bin. Однако он выдаст предупреждение.

Ссылки GAC

Если вы добавите сборку из глобального кэша сборок, Visual Studio внесет ее в файл Web.config, например:

<compilation debug = "false">
 <assemblies>
  <add assembly = "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Опять же, вы должны обратить внимание на то, что Visual Studio предполагает, что если сборка находилась в GAC на вашем компьютере разработки, то она будет в том же месте во время выполнения! Это может вызвать у вас проблемы, если у вас, возможно, установлен Oracle.DataAccess на вашем компьютере разработчика, который поместит его в GAC, но при развертывании вы просто копируете .dll на место на производственной машине. Он по-прежнему будет пытаться найти его в GAC и может потерпеть неудачу во время выполнения.

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

Очень полезный пост в блоге на эту тему. Спасибо.

Remko Jansen 23.02.2011 14:47

К сожалению, ссылка, похоже, больше не активна.

lgaud 24.04.2012 17:43

@lgaud: ой, извините, я только что отключил свой хостинг, потому что это было опубликовано сегодня утром. Я где-то сделал копию ... Если я найду, я дополню свой ответ полным текстом вместо ссылки.

CodingWithSpike 24.04.2012 21:09

Другие вопросы по теме