我正在和Newtonsoft.Json一起工作。Json.net)现在和多个C#解决方案需要引用它。似乎最方便和广泛使用的方法是用Newtonsoft.Json包管理器安装NuGet。但是我发现包安装在解决方案根目录(无论如何,安装是基于给定的解决方案),它的大小不能忽略(稍微超过10米),所以我想知道是否有一种优雅的方法在不同的C#解决方案之间共享这个包。
我搜索了Google,发现很少有令人满意的结果(可能是因为我没有正确地表达我的需求);唯一合理的答案是在目录和解决方案中创建一个.nuget文件夹,然后用一个NuGet.config文件填充它,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<config>
<add key="repositoryPath" value="E:\JsonExamples\C#Examples\UseJsonInCSharp\packages" />
</config>
</configuration>
但这不起作用,因为使用指令
using Newtonsoft.Json;
还没被认出来!也许还有其他的事情必须做,这是我不知道,但对退伍军人来说是常识?或者这可能是因为Newtonsoft.Json的版本太新,无法工作?有人能帮我吗?非常感谢!
还有一个词:我目前正在使用VS 2017,但我只找到了与VS 2015相关的答案,所以我想知道前面的方法,如果在VS 2015上有效的话,将永远适用于VS 2017。
发布于 2019-05-04 09:51:48
让我们首先澄清一些关于NuGet和项目中引用的事情:
选项1(建议)-将所有东西迁移到PackageReference
它是从VS 2017+中的2017+4开始提供的(我推荐至少VS 2017 15.7+,它为从老版本的NuGet版本自动迁移提供了向导)。这是引用NuGets最干净的方式,因为项目中的PackageReference并不硬编码NuGet下载位置。相反,它将此决定留给本地NuGet设置。默认情况下,它被设置为"%USERPROFILE%.nuget\packages“。不复制nuget包,它充当此计算机的全局缓存。要强制所有新项目默认使用PackageReference,您必须修改NuGet.config,下面是如何:Defaulting Package Management to PackageReference
选项2-为同一存储库中的所有项目指定公共NuGet位置
每个解决方案都加载NuGet配置设置。即使您使用NuGet,也建议为PackageReference设置一个公共配置文件,因为下载位置只是您可能希望集中管理所有解决方案的许多设置之一(另一个流行的设置是您希望使用的外部NuGet存储库)。NuGet下载位置设置被新PackageReference忽略,因此在混合场景中使用它是安全的。非常重要的是,使用此旧的NuGet项目使用对NuGet文件夹的硬编码引用,因此每次更改此NuGet位置设置时,都必须手动修复每个项目中的所有NuGet引用(通过手动编辑.csproj文件或删除和重新添加NuGets),因此明智地选择而不进行更改。
关于如何正确设置全局NuGet.config:的详细信息
首先,让我解释一下共享NuGet.config设置是如何工作的。NuGet从层次结构到根驱动器从解决方案位置扫描所有NuGet.config文件(它还检查所有.nuget文件夹)。如果检测到多个配置文件,则采用最接近解决方案的配置文件。例如,您有"C:\Code\Repository1\Project1\Solution1.sln“。如果您希望为NuGet文件中的每个解决方案设置公共的Repository1设置,那么将配置文件放到类似于"C:\Code\Repository1\NuGet.config“的位置。还要确保这是整个Repository1文件夹中唯一的配置文件。下一步是决定下载所有包的位置,例如"C:\Code\Repository1\NuGetPackages“。为了使一切在所有计算机上动态工作,在NuGet.config中放置相对路径,如下所示:
添加key="repositoryPath“value="NuGetPackages”
https://stackoverflow.com/questions/55863750
复制相似问题