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

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

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

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

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

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

Ответы

Ответ 1

Если вы ссылаетесь на 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;
            ...

Ответ 2

Проекты "Веб-сайт" в Visual Studio - это странная вещь. Они, похоже, пытаются удовлетворить традиционные веб-разработчики, где "сайт" - это всего лишь набор файлов в каталоге. Точно так же, когда вы создаете проект "Веб-сайт" в Visual Studio, нет реального "проекта", например, проекты С# имеют файл .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. Этот файл представляет собой текстовый файл в 1 строку, который указывает путь, из которого был загружен файл. Так, например, если бы я добавил "MyAssem.dll" из.... \libs, то в папке веб-сайта\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 и может потерпеть неудачу во время выполнения.

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

Ответ 3

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

Структура моей папки ниже

  • ClassLibraries
    ThirdParty
    Сайт /Bin
    CopyprojectDll.ps1
    Website.sln

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

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

Пример файла powershell ниже.

$folders = @(); $ folders + = "IB.Security" $ folders + = "ClassLibraries/Core.Classes"

функция CopyDllsToWebBin ($ dll_files) { if ($ 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 | sort-object Name   CopyDllsToWebBin ($ dll_files)   $ dll_files = Get-ChildItem -Path $folder $dll_output_folder -include *.pdb -Recurse | sort-object Name   CopyDllsToWebBin ($ dll_files)   $ dll_files = Get-ChildItem -Path $folder $dll_output_folder -include *.xml -Recurse | sort-object Name   CopyDllsToWebBin ($ dll_files)   "Скопированная $папка $dll_output_folder"

}

$dll_files = Get-ChildItem -Path "ThirdParty" -ключить *.dll -Recurse | sort-object Name CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path "ThirdParty" -ключить *.pdb -Recurse | sort-object Name CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $folder $dll_output_folder -include *.xml -Recurse | sort-object Name CopyDllsToWebBin ($ dll_files)

"Скопированная третья сторона"

дата