如何以编程方式获取解决方案中使用的Nuget包的版本?

时间:2016-01-13 19:47:06

标签: c# .net nuget

我正在开发一个项目,我们需要知道我们正在使用的Nuget包的版本,并在代码中使用它。

我试过的一种方法是从a((b) => console.log(b), [1,2,3])文件中读取,为我想要的包解析它,然后解析该版本的行。类似的东西:

packages.config

有没有更好的方法以编程方式执行此操作?

编辑:上面的代码不起作用,因为没有随应用程序部署packages.config。

3 个答案:

答案 0 :(得分:2)

您可以从汇编中读取版本

string assemblyVersion = Assembly.LoadFile('your assembly file').GetName().Version.ToString(); 

答案 1 :(得分:0)

好问题。但你还没有说,你为什么要知道版本?我必须从指出你走错路的方向开始我的回答。我怀疑你需要在运行时知道正在使用的程序集的版本。但整个nuget概念和packages.config是编译时概念,而不是运行时概念。您的输出文件夹或已发布的文件夹中甚至不应该有packages.config。您在运行时需要做的是从AppDomain.CurrentDomain获取加载的程序集。我不会在这里深入探讨here is the reference you can look at。我只说你可以在那里获得装配版本。

然后,在代码中,如果你想根据某个程序集版本做不同的事情。如果要根据框架或程序集的版本进行编译 - check this post

底线:

  

packages.config存在与否,或其中包含的内容与编译时使用的dll无关。 VS具有令人难以置信的爬行目录和查找匹配的dll的能力。 packages.config可能与实际的dll过时或不同步。这不是防弹做事的方式

答案 2 :(得分:0)

如果包中包含任何类,则可以从该类中获取程序集,然后从版本中获取程序集。但是,如果包中没有类,例如做类似使用nuget.targets复制文件的操作,那么这种方式是不可能的。

Console.WriteLine("Using Selenium.WebDriver: " + Assembly.GetAssembly(typeof(OpenQA.Selenium.By)).GetName().Version.ToString());