C# 如何让NuGet软件包正确还原从其他解决方案添加的现有项目?
我有两个VisualStudio2019解决方案A和B,它们都包含几个项目。解决方案A包括解决方案B中的一个项目ProjectB,它作为现有项目添加到A中。此项目使用多个NuGet依赖项。显然,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的范围内构建,因为
packages
文件夹中。这会导致大量“无法找到引用的组件”错误消息,这种情况相当于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依赖项将正确解析