这是一个尴尬的问题:我们正在清理一些旧的C#代码。它有很多硬依赖。我们用NuGet依赖项替换了所有硬依赖项。
但是,现在当我们构建项目时,它将所有下载的依赖项放在C:\Assemblies
中。因为(iirc?)Visual Studio只使用相对路径,我怀疑它实际上是"..\..\..\Assemblies"
或其他一些路径,所以取决于它所放置的目录。它似乎也是在其他父目录中创建一些其他Assemblies文件夹,因此它甚至不一致。
此问题会影响数十个解决方案,每个解决方案都有十几个或更多项目。我想用一致的东西替换它们,这些东西不会导致问题。向上一级(即"..\Assemblies\"
)可能有效,但不同的解决方案是不同数量的文件夹深度。或许只是为每个项目提供自己的/lib/
文件夹(我认为这是标准做法?)。
我需要更改什么 - 它只是csproj文件中的OutputPath
和HintPath
参数,还是更多?有没有一些很好的自动化方法来实现这一点,或者我将不得不手动更改每个csproj文件?
答案 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。