C# 如何让NuGet软件包正确还原从其他解决方案添加的现有项目?

C# 如何让NuGet软件包正确还原从其他解决方案添加的现有项目?,c#,visual-studio,nuget,C#,Visual Studio,Nuget,我有两个VisualStudio2019解决方案A和B,它们都包含几个项目。解决方案A包括解决方案B中的一个项目ProjectB,它作为现有项目添加到A中。此项目使用多个NuGet依赖项。显然,NuGet包不受源代码控制。当用户从源代码管理新签出解决方案时,会发生以下情况: 如果先打开并构建解决方案B,ProjectB的NuGet依赖项将按预期恢复,项目将成功构建 如果在1之后打开并构建解决方案A,则所有内容都将成功构建。但是,如果省略步骤1,ProjectB将无法在解决方案A的范围内构建,因为

我有两个VisualStudio2019解决方案A和B,它们都包含几个项目。解决方案A包括解决方案B中的一个项目ProjectB,它作为现有项目添加到A中。此项目使用多个NuGet依赖项。显然,NuGet包不受源代码控制。当用户从源代码管理新签出解决方案时,会发生以下情况:

  • 如果先打开并构建解决方案B,ProjectB的NuGet依赖项将按预期恢复,项目将成功构建
  • 如果在1之后打开并构建解决方案A,则所有内容都将成功构建。但是,如果省略步骤1,ProjectB将无法在解决方案A的范围内构建,因为它引用的依赖项不会在原始路径中重新创建,尽管NuGet已将所有依赖项安装在A的
    packages
    文件夹中。这会导致大量“无法找到引用的组件”错误消息,这种情况相当于
  • 简单地清理NuGet缓存没有帮助。看来唯一能解决问题的办法就是打电话

    Update-Package -reinstall -ProjectName ProjectB
    
    在触发(重新)构建之前,从解决方案A的Package Manager控制台

    我想通过在预构建事件中包含
    updatepackage
    命令来实现自动化,但显然packagemanager控制台在那里是不可访问的,我希望避免安装任何其他软件


    在这种情况下,是否有办法正确恢复所有项目依赖项,以便整个解决方案a能够自动从头开始构建?

    听起来您需要将一个Nuget.Config文件作为解决方案项添加到每个解决方案中,并添加“respositoryPath”配置文件的密钥,以便两个解决方案将Nuget包引用解析到同一文件夹:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <config>
         <add key="repositoryPath" value="../../Nuget/packages" />
      <config>
    </configuration>
    
    
    
    显然,您需要调整每个Nuget.Config文件的repositoryPath值,以便两个解决方案使用相同的路径(如果解决方案A在文件结构中比解决方案B低一个文件夹,则需要在路径中添加另一个
    。/


    将Nuget.Config文件添加到每个解决方案后,您需要关闭/重新打开每个解决方案,然后运行
    更新包-重新安装
    ,以确保在每个项目文件中更新引用路径。

    听起来您需要将一个Nuget.Config文件作为解决方案项添加到每个解决方案中,并添加“respositoryPath”配置文件的密钥,以便两个解决方案将Nuget包引用解析到同一文件夹:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <config>
         <add key="repositoryPath" value="../../Nuget/packages" />
      <config>
    </configuration>
    
    
    
    显然,您需要调整每个Nuget.Config文件的repositoryPath值,以便两个解决方案使用相同的路径(如果解决方案A在文件结构中比解决方案B低一个文件夹,则需要在路径中添加另一个
    。/


    将Nuget.Config文件添加到每个解决方案后,您需要关闭/重新打开每个解决方案,然后运行
    更新包-重新安装
    ,以确保每个项目文件中的引用路径都已更新。

    事实证明,您可以在项目中使用PackageReference格式,而不是packages文件夹,这样做可以直接解决原始问题,而无需采取任何额外行动。因此,最优雅的解决方案是:在解决方案资源管理器中右键单击有问题项目的引用,然后单击上下文菜单中的
    Migrate packages.config to PackageReference
    。从现在起,当一个项目包含在另一个解决方案中时,NuGet依赖项将正确解析。

    事实证明,您可以在项目中使用PackageReference格式,而不是packages文件夹,这样做可以直接解析原始问题,而无需任何额外操作。因此,最优雅的解决方案是:在解决方案资源管理器中右键单击有问题项目的引用,然后单击上下文菜单中的
    Migrate packages.config to PackageReference
    。从现在起,当一个项目包含在另一个解决方案中时,NuGet依赖项将正确解析