我正在执行nuget迁移,以在所有解决方案中创建一个通用包目录。我写了一个脚本来去除NuGet配置文件、目标文件、提示路径(NuGet自动包恢复不需要这些),以及项目和解决方案文件中的其他一些东西。我现在有一个NuGet配置文件。
迁移在很大程度上是按预期进行的。然而,我遇到了Xuit和Newtonsoft的问题。Json包装。例如,一些项目找不到Xuit包,Visual Studio显示以下错误:"找不到类型或命名空间"Xuit"(是否缺少程序集引用?)我唯一能解决此问题的方法是通过运行以下命令重新安装Xuit程序包:
Update-Package –reinstall xunit
当我重新安装Xuit提示时,路径被添加回项目文件中,以下代码被添加到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包的提示路径和其他一些东西?有没有办法在没有他们的情况下解决这个问题?这正是我试图通过执行迁移来避免的事情。
如果使用的是packages.config文件,则需要提示路径,以便MSBuild能够解析程序集。xunit和JSON。NET没有安装到GAC中,因此如果没有提示路径或其他机制(如为项目配置的引用路径),生成将无法找到程序集。此外,每当您更新NuGet包时,提示路径都会添加回项目文件中。
所使用的任何自定义MSBuild.targets文件都会出现类似的问题。如果从项目中删除它们,则MSBuild将找不到它们。
NuGet restore只会下载软件包并将其提取到软件包目录中。它不会修改项目文件。
如果你想避免使用提示路径,那么你应该考虑使用project.json文件,而不是packages.config文件。如果使用project.json文件,则在构建时使用NuGet目标文件解析程序集,而不必在项目文件(.csproj)中具有引用或提示路径。