Процесс сборки - Что использовать?

Вот тот, который даст Вам визуального селектора файла для выбора папки, к которой Вы хотите сохранить файлы, и также позволяет Вам выбрать разделитель CSV (я использую каналы '|', потому что мои поля содержат запятые, и я не хочу иметь дело с кавычками):

' ---------------------- Directory Choosing Helper Functions -----------------------
' Excel and VBA do not provide any convenient directory chooser or file chooser
' dialogs, but these functions will provide a reference to a system DLL
' with the necessary capabilities
Private Type BROWSEINFO    ' used by the function GetFolderName
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
                                             Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
                                           Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function GetFolderName(Msg As String) As String
    ' returns the name of the folder selected by the user
    Dim bInfo As BROWSEINFO, path As String, r As Long
    Dim X As Long, pos As Integer
    bInfo.pidlRoot = 0&    ' Root folder = Desktop
    If IsMissing(Msg) Then
        bInfo.lpszTitle = "Select a folder."
        ' the dialog title
    Else
        bInfo.lpszTitle = Msg    ' the dialog title
    End If
    bInfo.ulFlags = &H1    ' Type of directory to return
    X = SHBrowseForFolder(bInfo)    ' display the dialog
    ' Parse the result
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal X, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetFolderName = Left(path, pos - 1)
    Else
        GetFolderName = ""
    End If
End Function
'---------------------- END Directory Chooser Helper Functions ----------------------

Public Sub DoTheExport()
    Dim FName As Variant
    Dim Sep As String
    Dim wsSheet As Worksheet
    Dim nFileNum As Integer
    Dim csvPath As String


    Sep = InputBox("Enter a single delimiter character (e.g., comma or semi-colon)", _
                   "Export To Text File")
    'csvPath = InputBox("Enter the full path to export CSV files to: ")

    csvPath = GetFolderName("Choose the folder to export CSV files to:")
    If csvPath = "" Then
        MsgBox ("You didn't choose an export directory. Nothing will be exported.")
        Exit Sub
    End If

    For Each wsSheet In Worksheets
        wsSheet.Activate
        nFileNum = FreeFile
        Open csvPath & "\" & _
             wsSheet.Name & ".csv" For Output As #nFileNum
        ExportToTextFile CStr(nFileNum), Sep, False
        Close nFileNum
    Next wsSheet

End Sub



Public Sub ExportToTextFile(nFileNum As Integer, _
                            Sep As String, SelectionOnly As Boolean)

    Dim WholeLine As String
    Dim RowNdx As Long
    Dim ColNdx As Integer
    Dim StartRow As Long
    Dim EndRow As Long
    Dim StartCol As Integer
    Dim EndCol As Integer
    Dim CellValue As String

    Application.ScreenUpdating = False
    On Error GoTo EndMacro:

    If SelectionOnly = True Then
        With Selection
            StartRow = .Cells(1).Row
            StartCol = .Cells(1).Column
            EndRow = .Cells(.Cells.Count).Row
            EndCol = .Cells(.Cells.Count).Column
        End With
    Else
        With ActiveSheet.UsedRange
            StartRow = .Cells(1).Row
            StartCol = .Cells(1).Column
            EndRow = .Cells(.Cells.Count).Row
            EndCol = .Cells(.Cells.Count).Column
        End With
    End If

    For RowNdx = StartRow To EndRow
        WholeLine = ""
        For ColNdx = StartCol To EndCol
            If Cells(RowNdx, ColNdx).Value = "" Then
                CellValue = ""
            Else
                CellValue = Cells(RowNdx, ColNdx).Value
            End If
            WholeLine = WholeLine & CellValue & Sep
        Next ColNdx
        WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
        Print #nFileNum, WholeLine
    Next RowNdx

EndMacro:
    On Error GoTo 0
    Application.ScreenUpdating = True

End Sub
10
задан Community 23 May 2017 в 12:10
поделиться

7 ответов

NAnt, поскольку проект мертв или находится на поддержании жизни (последний выпуск был 0.86 beta 1, два года назад). Это было в основном прервано выпуском MSBuild. NAnt было хорошо, MSBuild в порядке, я думаю, но меня все больше и больше тянет писать код, ну, ну, язык, а не некоторые процедурные вещи на основе XML. С фреймворками сборки на основе XML опыт отладки ужасен, и вы в конечном итоге обманываете, встраивая «сценарии» в C #, что сводит на нет цель объявления над программированием. Та же печальная история, что и XSLT, если на то пошло.

Несколько хороших фреймворков сборки без XML:

  • Rake http://rake.rubyforge.org/ (на основе Ruby) весьма неплохие, а некоторые Существуют специфические задачи .NET, и я думаю, что IronRuby сейчас их выполняет.
  • PSake http://code.google.
9
ответ дан 3 December 2019 в 18:34
поделиться

Не используйте C # для создания сценария, потому что вы не хотите компилировать его, когда вы вносите в него изменения.

Если вы планируете использовать PowerShell, обратите внимание на PSake .

Если вы дружите с XML, тогда используйте MSBuild или NAnt. Возможно эти сценарии сборки будут вам полезны. MSBuild имеет одно преимущество: Ctrl + F5 создает этот сценарий в Visual Studio.

Я медленно перехожу к Rake, потому что он лучше, а Ruby - это язык программирования (что означает, что вы можете делать все, что угодно): Я писал в блоге о том, насколько это может быть хорошо, но вы должны переводить это или смотреть только на код . Если вам это нравится, то вы можете увидеть полный сценарий и зависимости .

Хорошая книга о непрерывной интеграции принадлежит Полю Дювалю, Стив Матиас и Эндрю Гловер (Непрерывная интеграция: повышение качества программного обеспечения и снижение рисков).

3
ответ дан 3 December 2019 в 18:34
поделиться

Я не вижу НИКАКОЙ причины, почему бы не выполнить простой процесс сборки в Powershell.

I используйте для моего проекта песочницы следующее:

2
ответ дан 3 December 2019 в 18:34
поделиться

В конце концов, задачи MSBuild и NAnt могут выполнять оболочку в командной строке, так что в конечном итоге они могут поддерживать материалы, не относящиеся к MS.

I Я лично предпочел бы MSBuild и позволил бы серверу сборки, например TeamCity of CCNET, выполнять сборку и развертывание и т. д. Это невероятно гибко.

3
ответ дан 3 December 2019 в 18:34
поделиться

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

Обычно все становится намного сложнее, чем ваши проекты. Некоторые из преимуществ MSBuild, nAnt и других (коммерческих) продуктов - это предварительно запеченная поддержка интеграции с общими службами или концепциями (например, архивирование файлов) и значительно меньше времени, чтобы включить ее в процесс сборки.

Будет стоимость (реальная или с точки зрения усилий), если вы можете разумно спрогнозировать свои потребности в автоматизации,

2
ответ дан 3 December 2019 в 18:34
поделиться

Одна вещь, о которой я пока особо не упоминал: управление зависимостями / перестроением. Хорошая система сборки (даже почтенная make ) справится с этим за вас, и если вы создаете свою собственную систему сборки, вы делаете одно из двух:

  • Часто перестраиваете все (или, по крайней мере, больше) чем вам нужно)
  • Самостоятельная реализация логики отслеживания и обновления зависимостей

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

Прискорбно слышать, что NAnt умирает, хотя ; Хотя у Ant есть свои недостатки, он является разумной и гибкой системой сборки.

1
ответ дан 3 December 2019 в 18:34
поделиться

Если вы намереваетесь и дальше оставаться «магазином для одного человека» и ваши проекты, как правило, небольшие, то вы, вероятно, сможете обойтись развертыванием собственной системы сборки. Я бы по-прежнему не рекомендовал этого делать, поскольку наличие опыта работы с часто используемыми средами сборки - это хорошая вещь, которую нужно включить в свое резюме.

Я написал настраиваемую систему сборки, которую мы используем на работе около пяти лет назад для обработки некоторых довольно сложных, многосторонних -целевые сборки, которые у нас есть. Мы используем его примерно с 2003 года и продолжаем его использовать. Однако я пытался перенести его на Ant или даже Make по следующим причинам:

  1. Система сборки, которую я написал, работает в Windows, и нам нужны другие платформы. Его можно было бы довольно легко переписать для работы в другом месте, но код управления процессами сложно легко перенести.
  2. Интеграция в среду CI затруднительна, если вы используете полностью настраиваемую среду.
  3. Добавление поддержки различных технологий SCM - медленное дело. На данный момент нам нужна поддержка Visual SourceSafe, Subversion и Perforce.
  4. Расширение и поддержка - это большая работа, которая «не добавляет ценности для клиентов» .

Теперь наша среда немного сложнее, чем большинство других, поскольку мы занимаемся разработкой встраиваемых систем, поэтому нередко сборка одного продукта состоит из двух или трех различных цепочек инструментов в Windows, отправляется на компьютер Linux через ssh для целевой системы Linux, и psexec на удаленную машину Windows, чтобы использовать компилятор с блокировкой узла. Это' На самом деле довольно забавно оглянуться назад и подумать, что система сборки, которую мы начали с одного командного файла, была переписана с использованием Perl, чтобы приспособить смесь декларативных операторов и операторов языка программирования, а затем была снова написана в декларативном XML-подобном Ant. стиль, раскрывающий партию или оболочку. Теперь я думаю о том, чтобы заменить все это на Ant + Maven + Ivy или какую-то подобную цепочку.

В то время для меня было правильным решением развернуть мою собственную систему сборки, поскольку мы были довольно маленьким магазином, занимавшимся сборкой, в основном основывались на инструментах командной строки, и в то время не было широкого набора инструментов. Однако сегодня я бы порекомендовал хорошенько и внимательно изучить доступные инструменты. После всего, написание собственной системы сборки означает, что вы будете тратить время и деньги на ее написание и поддержку вместо написания производственного кода .

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

Я думаю, что время, потраченное на изучение существующей системы и ее расширение для удовлетворения ваших потребностей, вероятно, окупится. Мне показался интересным опыт написания задач Ant. В целом, это был хороший опыт обучения, хотя я выполнял его на контрактной работе, где для публикации документов использовались Ant и CruiseControl.

Я думаю, что время, потраченное на изучение существующей системы и ее расширение для удовлетворения ваших потребностей, вероятно, будет более целесообразным. Мне показался интересным опыт написания задач Ant. В целом, это был хороший опыт обучения, хотя я выполнял его на контрактной работе, где для публикации документов использовались Ant и CruiseControl.

1
ответ дан 3 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: