msbuild не выбирает пакеты из восстановленного местоположения - PullRequest
0 голосов
/ 01 апреля 2020

Я бы хотел восстановить свои нюгеты на один уровень выше. Мой каталог репо указывает на бывших. c: \ repo \ s и мой solutin находится в c: \ repo \ s \ sr c, когда я восстанавливаю пакеты с помощью nuget restore, он восстанавливает пакеты в C: \ repo \ s \ src \ packages, и я хотел бы, чтобы это было C: \ repo \ s \ packages. Благодарим вас за помощь.

У меня есть следующий файл nuget.config в каталоге C: \ repo \ s \ sr c.

$<configuration>
  <config>
    <add key="repositoryPath" value="..\..\packages" />
  </config>
</configuration>

Моя работа на Yaml выглядит следующим образом

$steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.3.0'

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: src/myproject.sln
    vstsFeed: '4448b1e2-8ac8-45ef-870c-1ebab90f3348'
    restoreDirectory: '$(Build.SourcesDirectory)'


    - task: VSBuild@1
      displayName: 'Build solution src/myproject.sln'
      inputs:
    solution: src/myproject.sln
    vsVersion: 15.0
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

1 Ответ

0 голосов
/ 01 апреля 2020

msbuild не выбирает пакеты из восстановленного местоположения

Используете ли вы файл nuget.config или указываете restoreDirectory: '$(Build.SourcesDirectory)' непосредственно в задаче nuget restore, nuget восстановит пакет в папка C:\repo\s\packages.

Однако NuGet Restore восстанавливает только пакеты в каталог восстановления , но не изменяет файл проекта .

Когда мы добавляем пакеты nuget в проект, он добавляет следующий код в файл проекта для указания местоположения DLL:

  <ItemGroup>
    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.3-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>

Существует узел HintPath для указания местоположения файла DLL.

Когда мы используем nuget.config или restoreDirectory: '$(Build.SourcesDirectory)' для изменения местоположения восстановления пакета, MSBuild не будет забирать пакет / dll на основе HintPath. Правильный HintPath должен быть:

<HintPath>..\..\packages\Newtonsoft.Json.12.0.3-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>

Вот почему msbuild не выбирает пакеты из восстановленного местоположения.

Чтобы решить эту проблему, вам нужно использовать командную строку NuGet в диспетчере пакетов. Консоль (на локальной VS):

Update-Package -reinstall

, чтобы принудительно переустановить ссылки на пакет в проект, он обновит HintPath. Загрузите файл изменений в Azure devops и постройте его.

Надеюсь, это поможет.

...