我正在开发一个项目,我们需要知道我们正在使用的Nuget包的版本,并在代码中使用它。
我试过的一种方法是从a((b) => console.log(b), [1,2,3])
文件中读取,为我想要的包解析它,然后解析该版本的行。类似的东西:
packages.config
有没有更好的方法以编程方式执行此操作?
编辑:上面的代码不起作用,因为没有随应用程序部署packages.config。
答案 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());