Nuget Restore忽略引用项目

时间:2017-04-20 10:40:37

标签: visual-studio-2017 azure-pipelines nuget-package-restore

我正在尝试将.NET核心库项目从VS2015迁移到VS2017,这将导致project.json文件转换为.csproj文件。 现在,该项目引用了我创建的两个库,以及何时将构建推送到VSTS包管理器。

在Visual Studio中使用项目时,我更喜欢将引用的项目添加到我的解决方案中,因此我可以在同一解决方案中处理代码。同时我希望该项目能够引用这些软件包,因此在构建VSTS时,它将代替软件包。

使用project.json文件,这工作正常,nuget恢复(我使用nuget恢复,因为dotnet恢复无法验证VSTS packagemanager)只会恢复包,我可以构建它。

现在使用.csproj文件,引用项目将添加如下:

<ItemGroup">
  <ProjectReference Include="myliba\src\myliba.csproj" />
  <ProjectReference Include="mylibb\src\mylibb.csproj" />
</ItemGroup>

这将使'nuget restore'尝试恢复这些项目的包..但由于这些项目在另一个存储库中,它们不是(也不应该)从存储库下载,并且'nuget restore'失败错误:

Errors in C:\a\1\s\src\mylib\mylib.csproj
    Unable to resolve 'C:\a\1\myliba\src\myliba' for '.NETCoreApp,Version=v1.1'.
    Unable to resolve 'C:\a\1\mylibb\src\mylibb.csproj' for '.NETCoreApp,Version=v1.1'.

如何让nuget忽略这些ProjectReferences,并让它从VSTS包管理器中获取库?

一个解决方案:

如果我在VSTS上定义一个名为'BuildSystem'的变量并将其设置为VSTS,那么我可以在我的.csproj中检查这个

<ItemGroup Condition=" '$(BuildSystem))' == '' ">
  <ProjectReference Include="myliba\src\myliba.csproj" />
  <ProjectReference Include="mylibb\src\mylibb.csproj" />
</ItemGroup>

虽然这意味着我必须手动定制我的.csproj,这是最佳

1 个答案:

答案 0 :(得分:0)

您正在使用项目引用(ProjectReference)而不是包引用。您需要从VSTS包源安装相应的包。

示例项目文件代码(项目和包引用):

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="ClassLibraryCore2017" Version="1.0.0" /><!--package reference-->
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /><!--project reference-->
  </ItemGroup>

</Project>

您可以参考以下步骤来达到您的要求:

  1. 通过调用
  2. 将VSTS Feed添加到Nuget源

    这个命令

    nuget sources add -name [feed name] -source [your vsts feed] -username test -password [personal access token] -StorePasswordInClearText
    
    1. 通过VS 2017将VSTS Feed中的软件包安装到您的项目中。
    2. 将Nuget.config(在%appdata%\ Nuget文件夹中)添加到源代码管理(在解决方案文件的同一级别)
    3. 签入更改
    4. 如果您正在使用NuGet Installer步骤/任务,请在 NuGet.Config输入框的路径中指定NuGet.config。
    5. 如果您使用.Net Core(预览)步骤/任务,请在参数输入框中指定此参数:--configfile ..\Config\NuGet.Config