Nuget Package与C#和VB.NET兼容

时间:2018-02-19 18:29:48

标签: c# .net vb.net nuget .net-standard

我们有一个传统的VB.NET应用程序。前端正在MVC 5中重新设计,我被指派将业务逻辑抽象为API。

我创建了一个包含一些代码的库来调用API(因此构建MVC 5应用程序的开发人员可以轻松地安装/更新包并使用它。)

但我想帮助负责重新设计VB.NET项目的开发人员使用相同的NuGet包来使用API​​。

是否可以创建一个兼容两者的NuGet包,或者我真的需要制作两个包吗?

我读了一些关于.NET Standard的内容,但是我找不到关于VB.NET的任何内容,它看起来只适用于C#(我不确定)。

如果可能的话,VB.NET项目是否应该使用与包相同的.net框架版本才能工作?

2 个答案:

答案 0 :(得分:10)

编译的.Net DLL与语言无关:您可以使用任何.Net语言编写的任何.Net语言的DLL。

请注意,一般情况下,您只能引用为该版本或更低版本的.Net编译的.Net DLL(.Net程序集),而不是您编译的目标.Net版本代码。 。理想情况下,DLL(在NuGet和VB.Net中)都针对相同的.Net版本,否则请阅读MSDN: Version Compatibility in the .NET Framework

答案 1 :(得分:3)

该语言对.Net Nuget包无关紧要,因为它们都编译到它们所针对的框架。这意味着从C#代码编译的C#程序集可以反编译为C#或VB .Net,无论它们是在原始语言中创建的。

更多细节:

Nuget软件包受其所针对的框架版本的限制,因此如果您想最大限度地利用第三方库并定位目标,那么您的遗留应用程序应该优先定位.Net框架的最新版本(截至本文发布时为4.7.1)最新的.net标准(写作时为2.0)。

.Net Standard是兼容性标准,这意味着如果语言运行时版本支持该版本的标准,则保证可以使用某些API。

https://docs.microsoft.com/en-us/dotnet/standard/net-standard

根据该文档中的表格,如果旧版应用程序的目标是.net framework 4.5,则只能构建以.net标准1.1为目标的库。您的nuget软件包的任何更高版本都将阻止您在旧版应用程序中使用它。