Лучшие практики для хранения веб-сайта ASP.NET в Subversion? - PullRequest
6 голосов
/ 31 августа 2009

В настоящее время я работаю над проектом ASP.NET с несколькими разработчиками, использующими Subversion для распространения кода, но на данный момент он совершенно запутан. Человек, который настроил хранилище Subversion, включил файлы конфигурации, специфичные для его компьютера, каталоги bin \ * и другие подобные вещи.

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

То, что я ищу, - это информация о руководящих принципах. Вот начало для них, и, надеюсь, мы сможем сделать из этого что-то хорошее:

Файловая структура должна быть настроена так, чтобы сторонние библиотеки регистрировались вне выходных каталогов сборки (поскольку они не будут включены в репозиторий.) Имя этого каталога должно быть "Библиотеки".

Никакие машинные файлы не должны быть включены в Subversion. Таким образом, проверяется только шаблон Web.config, который настраивается разработчиками в соответствии со своей машиной. Это поведение включено в Visual Studio 2010 по умолчанию, и к отдельным файлам конфигурации (Web.Local.config) автоматически применяется шаблон (Web.config). Локальный файл конфигурации по-прежнему не должен быть включен в Subversion, если он применяется для конкретного компьютера.

Файлы решений и проектов не должны содержать никаких абсолютных путей.

Список игнорирования должен быть настроен. Начать с:

'
*.user
obj
'

Пример структуры файла для веб-сайта ASP.NET 2.0 с библиотекой классов, специфичной для веб-сайта, и сторонней библиотекой:

'
/trunk/
    Libraries/
        ThirdParty.dll
    MyClassLibrary/
        bin/  [Ignore]
        obj/  [Ignore]
        Properties/
            AssemblyInfo.cs
        SomeClass.cs
        MyClassLibrary.csproj
            - Holds references to third-party libraries. For example:
              ../Libraries/ThirdParty.dll
    MyWebApplication/
        bin/
            ThirdParty.dll  [Ignore; copied by build process]
            ThirdParty.dll.refresh
                - Contains "../Libraries/ThirdParty.dll"
        Default.aspx
        Default.aspx.cs
        Web.config  [Ignore]
        Web.config.template
    MySolution.sln
        - Holds list of projects.
        - Has reference information for projects.
'

Альтернативой использованию Web.config.template было бы включение файла Local.config из Web.config, но это может быть менее гибким.

При использовании проекта веб-приложения, а не проекта веб-сайта, ссылки будут сохраняться в файле проекта, а не в файлах .refresh, поэтому папка bin / будет игнорироваться.

Может ли кто-нибудь увидеть ошибки в приведенных выше предложениях? Чего-то не хватает? У кого-нибудь есть предложения по списку игнорируемых? Я только что начал с нескольких записей на данный момент.

Ответы [ 2 ]

7 голосов
/ 31 августа 2009

Я думаю, что вы хороший шаг на пути. Но почему бы не включить игнорирование всей папки bin в / MyWebApplication вместо файлов? Вы бы не добавили вывод вашей сборки в Subversion? Я определенно считаю это плохой практикой.

Также, если возможно, вы можете добавить файл web.config в subversion, но в элементе указать новый файл с appSettings: например,

<appSettings file="local.config">

Тогда svn игнорирует файл local.config. Так я всегда действую.

Но, конечно, это работает, только если каждый настраиваемый параметр находится в appSettings (одна из причин, по которой мне не нравится модель провайдера, потому что все провайдеры должны получать строки соединения из элемента connectionString, и вы не можете перенастроить их для принятия строка подключения из appSettings)

Редактировать : троет просветил меня и указал, что вы также можете переопределить параметры конфигурации connectionString в отдельном файле

<connectionStrings configSource="ConnectionStrings.config"/>.

Итак, я бы поставил файл web.config под контроль subversion, но svn игнорировал другие файлы, которые переопределяют настройки локально.

1 голос
/ 31 августа 2009

Вы должны добавить файлы .refresh; не настоящие DLL.

Система проектов Visual Studio отправляет список файлов, которые должны быть добавлены в систему контроля версий, поставщикам SCC. AnkhSVN - поставщик Subversion SCC, который использует эту информацию, чтобы предложить добавить эти файлы (а не другие файлы).

VisualSVN и другие клиенты Subversion, которые смотрят только на расширения файлов, не получают эту информацию из ASP.Net.

(Примечание: если вы удалите файл .refresh, Visual Studio добавит DLL в список файлов, которые должны быть зафиксированы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...