Nuget 获取Visual Studio之外的包的当前版本

Nuget 获取Visual Studio之外的包的当前版本,nuget,nuget-package,Nuget,Nuget Package,我们正在迁移到使用packages和NuGet来管理我们对第三方组件的依赖关系。当通过msbuild从VisualStudio内或生成服务器上的生成中引用包时,这种方法非常有效。 但是,我们希望在构建脚本和安装程序中访问许多文件。以前,这些都是在源代码管理中,有一个众所周知的路径,现在我们正在使用的包的版本发生了变化,因此包的路径和文件也在发生变化 有没有一种简单的方法可以获取给定包的路径?我目前拥有的最佳解决方案是搜索所有packages.config文件并从中提取包版本 我们需要访问的文件示

我们正在迁移到使用packages和NuGet来管理我们对第三方组件的依赖关系。当通过msbuild从VisualStudio内或生成服务器上的生成中引用包时,这种方法非常有效。 但是,我们希望在构建脚本和安装程序中访问许多文件。以前,这些都是在源代码管理中,有一个众所周知的路径,现在我们正在使用的包的版本发生了变化,因此包的路径和文件也在发生变化

有没有一种简单的方法可以获取给定包的路径?我目前拥有的最佳解决方案是搜索所有packages.config文件并从中提取包版本

我们需要访问的文件示例如下

运行单元测试的NUnit.Runners包中的NUnit控制台可执行文件。
我们使用安装程序重新分发的各种软件包中的许可证文件。

使用packages.config文件是一个非常好的解决方案。NuGet本身使用两种方法:

  • 从packages.config读取包信息,并使用该信息解析包路径
  • 枚举packages目录中的所有目录
  • 如果您不想自己编写代码,您可以使用执行上述任一操作。可以使用的类包括DefaultPackagePathResolver、PackageReferenceFile和LocalPackagePository或SharedPackageRepository

    第二种方法的一个问题是,有时候NuGet可能偶尔会留下项目不一定引用的NuGet包。在这种情况下,查看软件包目录可能会得到错误的信息

    我能想到的唯一其他方法可能是读取项目文件以查找程序集引用。尽管这对于解决方案级别的包(如NUnit.Runners)不起作用