Как можно скопировать локальные DLL-файлы, которые отсутствуют в NuGet, при использовании CI/CD и конфигурации в формате YAML?

Здравствуйте! Я работаю над своим первым проектом CI/CD, и у меня возникла проблема с библиотеками DevExpress. NuGet Restore не загружает их, хотя на сервере в GitRunner они присутствуют, но не копируются в проектную папку. Можете подсказать, как это исправить? Также прикладываю файл конфигурации. Прошу отнестись с пониманием и помочь мне разобраться. 

Вот сообщение об ошибке:  
<blockquote>error CS0246: The type or namespace name 'DevExpress' could not be found (are you missing a using directive or an assembly reference?) <br/>
[C:\CI_GitLab\GitLabRunner1\builds\BA6s9c1c\0\commercialprojects\CommertialProject01\webreports\Webreports.Services\Webreports.Services.csproj]</blockquote>  

Конфигурация выглядит следующим образом:  
<pre><code>variables:
    #
    #Dev
    #
    PublishProfileDev: ".\\WebReports.DXwebUI\\Properties\\PublishProfiles\\dev.pubxml"
    PublishPathDev: "\\dev-web01-test.prevedmedved.ru\\c$\\WebSites\\CommertialProject01\\WebReports"
stages:
    - restore
    - build
    - test
    - deploy
restore_job:
    stage: restore
    before_script:
        - echo "Start restore..."
    script:
        - echo "Restoring..."
       
    only:
        - master
        - stage
    after_script:
        - echo "Finish restore..."
        
build_job:
    stage: build
    before_script:
        - echo "Start build..."
    script:
        - echo "Building..."
        - "nuget restore"
        - "dotnet restore"
        - "dotnet build"
    only:
        - master
        - stage
    after_script:
        - echo "Finish build..."

test_job:
    stage: test
    before_script:
        - echo "Start tests..."
    script:
        - echo "Running tests..."
        - "dotnet test"

    only:
        - master
        - stage
    after_script:
        - echo "Finish tests..."</code></pre>
  • 6 декабря 2024 г. 8:03
Ответы на вопрос 1
Здравствуйте!

Проблема, с которой вы столкнулись, связана с тем, что некоторые DLL-файлы DevExpress отсутствуют в NuGet и не копируются в проектную папку. Чтобы решить эту проблему, вы можете использовать несколько подходов:

### 1. Добавление зависимостей вручную

Если у вас есть DLL-файлы, их можно добавлять вручную в проект. Попробуйте следующие шаги:

1. **Создайте директорию для DLL-файлов** в репозитории вашего проекта, например, `libs/DevExpress`.
2. Скопируйте все необходимые DLL-файлы DevExpress в эту директорию.
3. В файле проекта (`.csproj`) укажите пути к DLL:

```xml
<ItemGroup>
  <Reference Include="DevExpress.Data.vXX.X, Version=XX.X.X.X, Culture=neutral, PublicKeyToken=b88d1754d700e49a">
    <HintPath>..\libs\DevExpress\DevExpress.Data.vXX.X.dll</HintPath>
  </Reference>
  <Reference Include="DevExpress.Web.vXX.X, Version=XX.X.X.X, Culture=neutral, PublicKeyToken=b88d1754d700e49a">
    <HintPath>..\libs\DevExpress\DevExpress.Web.vXX.X.dll</HintPath>
  </Reference>
  <!-- Добавьте другие необходимые зависимости -->
</ItemGroup>
```

### 2. Использование скрипта для копирования

Вы можете добавить задачу в ваш YAML-файл, которая будет копировать локальные DLL-файлы в нужную директорию перед сборкой:

```yaml
build_job:
    stage: build
    before_script:
        - echo "Start build..."
    script:
        - echo "Copying local DLLs..."
        - cp -R path/to/local/dlls/* path/to/project/libs/
        - echo "Building..."
        - "nuget restore"
        - "dotnet restore"
        - "dotnet build"
    only:
        - master
        - stage
    after_script:
        - echo "Finish build..."
```

Замените `path/to/local/dlls/` на фактический путь к вашим локальным DLL-файлам.

### 3. Использование `artifacts` для передачи DLL-файлов

Если ваш CI/CD сервер позволяет использовать артефакты, вы можете сначала собрать проект на другом этапе и сохранить DLL-файлы в артефактах, которые затем можно использовать в дальнейших этапах.

Пример конфигурации с использованием артефактов:

```yaml
build_job:
    stage: build
    script:
        - echo "Building..."
        - dotnet build
    artifacts:
        paths:
            - path/to/project/libs/*.dll

test_job:
    stage: test
    dependencies:
        - build_job
    script:
        - echo "Running tests..."
        - dotnet test
```

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

### Итог

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