Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编译引用.NET 4.5.2程序集的.NET 4.5应用程序?_.net_.net 4.5.2 - Fatal编程技术网

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

如何编译引用.NET 4.5.2程序集的.NET 4.5应用程序?,.net,.net-4.5.2,.net,.net 4.5.2,我发现目标为4.5的应用程序可以加载并运行目标为4.5.2的程序集,但我无法编译这样的设置 问题:如何编译引用.NET 4.5.2程序集的.NET 4.5应用程序 实验细节: MyLib.csproj-目标4.5.2 MyApp.csproj-目标4.5,项目参考MyLib.csproj 在Visual Studio或MSBuild中编译失败,原因是: 警告MSB3274:无法解析主引用“(…)\MyLib.dll”,因为它是根据“.NETFramework,Version=v4.5.2”框

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

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

实验细节:

  • 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”(是否缺少using指令或程序集引用?)

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

但是,我成功地让这两个都运行起来:

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

背景:我正在准备将我们的大型NuGet managed多项目从.NET 4.5过渡到4.5.2。上面说,
它是对.NET Framework 4、4.5和4.5.1的高度兼容的就地更新,所以我尝试了如果我们将一些(NuGet-managed)引用升级到4.5.2会发生什么,而未升级的项目试图使用它们。

您可以尝试将您的库设置为
.NET标准的
库,而不是
.NET Framework 4.X

请参阅。

了解向后兼容,您可以使用多目标定位。 打开.csproj文件并按如下方式进行更改:

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

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

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

  • net462
  • netstandard1.6

为什么不将应用程序的目标框架更改为4.5.2?是的,这是一个高度向后兼容的更新。不是转发,他们没有发布4.5的更新,没有添加所有类型和成员。所以你的应用程序会在只有4.5版本的机器上启动,然后收缩,翻身,当你的代码使用不存在的成员时,会出现一个糟糕的异常。这就是警告告诉你的。您实际使用这些添加的成员的可能性很低,但数量很少,因此将目标定为4.5.2没有任何意义。@roryap:当然,这个例子是人为的。我们的项目规模很大,有1000多个项目跨越多个解决方案,许多项目生成二进制文件,通过NuGet分发到其他解决方案。因此,在升级二进制文件之前,我尽量避免升级某个二进制文件的所有使用者。请将整个项目升级到4.5.2。4.5.2是4.0和4.5的二进制替换。它也是受支持的最早的.NET版本,这意味着瞄准4.5没有意义。除非机器已经有4.5.2或更高版本,否则4.5.2组件甚至无法工作installed@PanagiotisKanavos:是否可以在具有4.5.1的计算机上运行针对4.5.2的应用程序?(提供的应用程序未使用任何4.5.2特定功能)更易于升级项目。4.5甚至不再受支持。最早的支持版本是4.5.2。此外,要运行.NET标准库,必须将运行库升级到受支持的版本anyway@PanagiotisKanavos当然可以,但这取决于需要什么。