麻烦自动恢复Nuget包Xunit和Newtonsoft.Json

时间:2016-04-19 21:21:02

标签: visual-studio json.net nuget nuget-package xunit.net

我正在进行nuget迁移,以便在所有解决方案中创建一个通用的包目录。我编写了一个脚本来摆脱NuGet配置文件,目标文件,提示路径(NuGet自动包恢复不需要这些),以及项目和解决方案文件中的其他一些东西。我现在有一个NuGet配置文件。

迁移在大多数情况下按预期工作。但是我遇到了Xunit和Newtonsoft.Json包的问题。例如,某些项目找不到Xunit包,Visual Studio显示以下错误:"类型或命名空间' Xunit'找不到(你错过了一个程序集引用吗?"我能解决的唯一方法是通过运行以下命令重新安装Xunit包:

Update-Package –reinstall xunit

当我重新安装Xunit时,在项目文件中添加了路径并将以下代码添加到app.config文件中:

 <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"   culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

我的问题是为什么我似乎只需要xunit和Newtonsoft.json包中的提示路径和其他一些东西?没有它们有没有办法解决这个问题?这是我试图通过执行此迁移来避免的确切类型。

1 个答案:

答案 0 :(得分:1)

如果您使用的是packages.config文件,那么您需要提示路径,以便MSBuild可以解析程序集。 xunit和JSON.NET未安装到GAC中,因此如果没有提示路径或某些其他机制(例如为项目配置的引用路径),则构建无法找到程序集。此外,每次更新NuGet包时,提示路径都将添加回项目文件。

使用的任何自定义MSBuild .targets文件都会出现类似问题。如果从项目中删除它们,则MSBuild无法找到它们。

NuGet还原只会下载软件包并将其解压缩到packages目录中。它不会修改项目文件。

如果您想避免使用提示路径,那么您应该查看使用project.json文件而不是packages.config文件。如果使用project.json文件,则使用NuGet目标文件在构建时解析程序集,而不必在项目文件(.csproj)中包含引用或提示路径。