【问题标题】:Nuget Restore ignore references projectsNuget Restore 忽略引用项目
【发布时间】:2017-09-16 22:51:11
【问题描述】:

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

在 Visual Studio 中处理项目时,我更喜欢将要引用的项目添加到我的解决方案中,这样我就可以在同一个解决方案中处理代码。同时我希望项目引用包,所以当在 VSTS 上构建时,它会获取包。

使用 project.json 文件,这工作正常,nuget restore(我正在使用 nuget restore,因为 dotnet restore 无法对 VSTS 包管理器进行身份验证)只会恢复包,我可以构建它。

现在有了 .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,这不是最佳

【问题讨论】:

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


    【解决方案1】:

    您正在使用项目参考 (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. 通过调用将 VSTS 提要添加到 Nuget 源代码

    这个命令

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

    【讨论】:

    • 我的 .csproj 文件中都有它们,因为我想在 VS2017 中工作时使用 ProjectReferences,在 VSTS 上构建时使用 PackageReferences,但这似乎会导致问题,似乎我必须选择使用 ProjectReferences 或 PackageReferences。所以我可以选择在 VS2017 中拥有良好的体验,但不能在 VSTS 上构建,或者反过来。使用 project.json 它可以同时使用....
    • @smolesen 您需要编辑项目文件以根据条件添加相应的引用,然后指定构建参数。
    • 希望有一种方式,我不必根据条件调整我的 .csproj 文件......本来希望它像在 vs2015 中一样流畅
    • @smolesen 在我看来,最好使用其中之一,因为如果项目参考源已更改但未更新为包提要,其他人可能会感到困惑。
    • 但是如果我使用项目引用,那么我的 CI/CD 将会失败,因为这些项目存在于另一个存储库中。如果使用 packagereferences 会很痛苦...成为开发人员,必须调试和测试代码...在 vs2015 中使用 project.json 工作得很好.....
    猜你喜欢
    • 2014-02-05
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多