如何更改许多Visual Studio项目的引用文件夹?

时间:2017-10-25 12:24:15

标签: .net visual-studio nuget visual-studio-2017

这是一个尴尬的问题:我们正在清理一些旧的C#代码。它有很多硬依赖。我们用NuGet依赖项替换了所有硬依赖项。

但是,现在当我们构建项目时,它将所有下载的依赖项放在C:\Assemblies中。因为(iirc?)Visual Studio只使用相对路径,我怀疑它实际上是"..\..\..\Assemblies"或其他一些路径,所以取决于它所放置的目录。它似乎也是在其他父目录中创建一些其他Assemblies文件夹,因此它甚至不一致。

此问题会影响数十个解决方案,每个解决方案都有十几个或更多项目。我想用一致的东西替换它们,这些东西不会导致问题。向上一级(即"..\Assemblies\")可能有效,但不同的解决方案是不同数量的文件夹深度。或许只是为每个项目提供自己的/lib/文件夹(我认为这是标准做法?)。

我需要更改什么 - 它只是csproj文件中的OutputPathHintPath参数,还是更多?有没有一些很好的自动化方法来实现这一点,或者我将不得不手动更改每个csproj文件?

1 个答案:

答案 0 :(得分:4)

  

但是,现在当我们构建项目时,它将所有下载的依赖项放在C:\ Assemblies中......它似乎也在其他父目录中创建了一些其他的Assemblies文件夹,所以它甚至不一致。

那是因为您的计算机上应该存在多个配置文件NuGet.Config。您可以参考官方文档:Configuring NuGet behavior了解更多详细信息。

默认引用文件夹位于解决方案目录中,我们可以使用repositoryPath中的nuget.config来更改默认值。

<configuration>
    <config>
      <add key="repositoryPath" value="..\Packages" />
    </config>
</configuration>

此外,任何数量的NuGet.Config文件都可以存在于计算机上,无论是在全局位置还是在项目的文件夹结构中。这允许您在应用于项目,一组项目或所有项目时控制不同位置的设置。

因此,您的计算机上应该有多个nuget.config文件,这会导致您的不同解决方案的参考文件夹不一致。

要解决此问题,您需要清除计算机上的其他nuget.config文件,但位于路径nuget.config的全局%appdata%\NuGet除外,并配置repositoryPath到您要保存引用的文件夹。它可以是相对路径或绝对路径。

如果要将references文件夹设置为某个解决方案的特殊目录,可以在解决方案文件.sln旁边添加一个NuGet.config文件,然后配置repositoryPath。此文件仅更改当前解决方案的引用文件夹。

  

我需要更改什么 - 它只是csproj文件中的OutputPath和HintPath参数,还是更多?有没有一些很好的自动化方法来实现这一点,或者我将不得不手动更改每个csproj文件?

您不需要手动更改.csproj文件,配置repositoryPath后,将Visual Studio收集,然后重新打开它,当您打开时,会有提示告诉您恢复包包管理器控制台或管理NuGet包以获得解决方案。等待恢复完成。然后你只需使用命令行:

Update-Package –reinstall 

在Package Manager控制台窗口中,NuGet将自动更新csproj文件中的HintPath个参数。

有关详细信息,请参阅How to reinstall and update packages