如何编译.NET 4.5应用程序并引用.NET 4.5.2程序集?

时间:2015-02-05 16:35:54

标签: .net .net-4.5.2

我发现以4.5为目标的应用可以加载并运行以4.5.2为目标的程序集 - 但我无法编译这样的设置!

问题:如何编译.NET 4.5应用程序并引用.NET 4.5.2程序集?

实验详情:

  • MyLib.csproj - 目标4.5.2
  • MyApp.csproj - 目标4.5,项目引用MyLib.csproj

在Visual Studio或MSBuild中进行编译失败:

  

警告MSB3274:主要参考"(...)\ MyLib.dll"无法解决,因为它是针对" .NETFramework,Version = v4.5.2"框架。这是一个比当前目标框架更高的版本" .NETFramework,Version = v4.5"。
  错误CS0246:类型或命名空间名称' MyLib'找不到(你错过了使用指令或汇编引用吗?)

我试图单独编译MyLib并引用它的DLL,但得到了相同的编译错误。

然而,我设法让两者都运行:

  • 将两个项目都设置为4.5,编译,将结果复制到c:\ test \ MyApp.exe
  • 将两个项目都设置为4.5.2,编译,将结果复制到c:\ test \ MyLib.dll
  • 运行MyApp.exe - 运行正常!

背景:我准备将我们的大型NuGet管理的多项目从.NET 4.5过渡到4.5.2。 announcementIt is a highly compatible, in-place update to the .NET Framework 4, 4.5 and 4.5.1,所以我尝试了如果我们将一些(NuGet管理的)refs升级到4.5.2会发生什么,而非升级的项目试图使用它们。

2 个答案:

答案 0 :(得分:3)

对于向后兼容,您可以使用多目标。 打开.csproj文件并将其更改为:

 <PropertyGroup>
    <TargetFrameworks>net462;netstandard1.6</TargetFrameworks>
    <PreserveCompilationContext>true</PreserveCompilationContext>
  </PropertyGroup>

这是两个框架的.nuget包的示例: net462 netstandard1.6

在构建时,它将创建两个带库的文件夹:

  • net462
  • netstandard1.6

答案 1 :(得分:0)

您可以尝试将库设为.NET Standard库而不是.NET Framework 4.X库。

请参阅related thread