我发现以4.5为目标的应用可以加载并运行以4.5.2为目标的程序集 - 但我无法编译这样的设置!
问题:如何编译.NET 4.5应用程序并引用.NET 4.5.2程序集?
实验详情:
在Visual Studio或MSBuild中进行编译失败:
警告MSB3274:主要参考"(...)\ MyLib.dll"无法解决,因为它是针对" .NETFramework,Version = v4.5.2"框架。这是一个比当前目标框架更高的版本" .NETFramework,Version = v4.5"。
错误CS0246:类型或命名空间名称' MyLib'找不到(你错过了使用指令或汇编引用吗?)
我试图单独编译MyLib并引用它的DLL,但得到了相同的编译错误。
然而,我设法让两者都运行:
背景:我准备将我们的大型NuGet管理的多项目从.NET 4.5过渡到4.5.2。 announcement说It is a highly compatible, in-place update to the .NET Framework 4, 4.5 and 4.5.1
,所以我尝试了如果我们将一些(NuGet管理的)refs升级到4.5.2会发生什么,而非升级的项目试图使用它们。
答案 0 :(得分:3)
对于向后兼容,您可以使用多目标。 打开.csproj文件并将其更改为:
<PropertyGroup>
<TargetFrameworks>net462;netstandard1.6</TargetFrameworks>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
这是两个框架的.nuget包的示例: net462 和 netstandard1.6
在构建时,它将创建两个带库的文件夹:
答案 1 :(得分:0)
您可以尝试将库设为.NET Standard
库而不是.NET Framework 4.X
库。
请参阅related thread。