2017-01-09 17 views
0

Я уже несколько дней искал, как заставить NuGet автоматически восстанавливать пакеты с помощью VS2015 с помощью GitLab, и мне не повезло.Пакет NuGet не восстанавливается с VS2015 с помощью GitLab

Сценарий: Я клонировал пустой репозиторий из GitLab и использовал VS для добавления файлов .gitignore и .getattribute по умолчанию. Я создал приложение консоли HelloWorld с использованием .NET framework 4.5.2. Я хочу автоматически увеличивать числа сборки, поэтому я установил пакет расширения MSBuild (введите «Install-Package MSBuild.Extension.Pack» в консоли NuGet в VS). Это изменяет файл CSPROJ. Затем я модифицировал файл проекта, чтобы обновить номера сборки и ревизий в каждой сборке. Чистая модифицированная часть файла проекта выглядит следующим образом:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<Import Project="..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets" Condition="Exists('..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets')" /> 
<Import Project="$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets" /> 
<Target Name="BeforeBuild" Condition="'$(Configuration)' == 'Release'"> 
    <AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" /> 
</Target> 
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 
    <PropertyGroup> 
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 
    </PropertyGroup> 
    <Error Condition="!Exists('..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets'))" /> 
</Target> 
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
    Other similar extension points exist, see Microsoft.Common.targets. 
<Target Name="BeforeBuild"> 
</Target> 
<Target Name="AfterBuild"> 
</Target> 
--> 

Так я строю, он ведет себя так, как и ожидалось, и проверить все это на другой машине, я клонировать хранилище и открыть решение.. Проект не загружается, и VS ничего не пытается восстановить; это ошибка:

C:\Users\mwoodard\Source\Repos\c-sharp-commons\HelloConsole\HelloConsole\HelloConsole.csproj : error : The imported project "C:\Users\mwoodard\Source\Repos\c-sharp-commons\HelloConsole\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. C:\Users\mwoodard\Source\Repos\c-sharp-commons\HelloConsole\HelloConsole\HelloConsole.csproj 

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

В дополнение к этому восстановление NuGet должно работать из MSBuild, поскольку наша сборка машина не будет работать с Visual Studio.

ответ

2

Чтобы справиться с проблемой не может открыть решения:

Используя этот код вместо

<Import Project="..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets" Condition="Exists('..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets')" /> 

После этого будут восстановлены пакеты при сборке в Visual Studio. (Enabling and disabling package restore in VS)

Что касается вопроса о восстановлении:

С MSBuild-integrated restore есть .nuget папка в растворе. Поскольку вы не хотите включать папку .nuget в папку решений и строить на сборной машине (например, CI), вам необходимо восстановить пакет перед сборкой.

Например, вы можете добавить шаг сборки восстановления NuGet, если построить с помощью сборки TFS/VSTS vNext. Для сборки gitlab CI вы можете восстановить пакет в before_script раздел в файле .gitlab-ci.yml.

+0

Спасибо, решение сработало. Исправленная строка была добавлена ​​NuGet, когда я установил пакет MSBuild Extensions. И BTW, это не значит, что я не хочу использовать папку .nuget, это то, что для меня не создается VS2015, и у меня нет файлов для ее заполнения. –