.net TargetFramework FrameworkDisplayName为空

.net TargetFramework FrameworkDisplayName为空,.net,.net-assembly,target-framework,.net,.net Assembly,Target Framework,以下程序集属性之间的有效差异是什么?也就是说,可能会出现什么运行时差异(如果有的话) [assembly: TargetFramework(".NETFramework,Version=v4.5.2", FrameworkDisplayName = "")] [assembly: TargetFramework(".NETFramework,Version=v4.5.2", Fram

以下程序集属性之间的有效差异是什么?也就是说,可能会出现什么运行时差异(如果有的话)

[assembly: TargetFramework(".NETFramework,Version=v4.5.2", 
                            FrameworkDisplayName = "")]

[assembly: TargetFramework(".NETFramework,Version=v4.5.2",
                           FrameworkDisplayName = ".NET Framework 4.5.2")]
当生成计算机未安装4.5.2参考程序集(通过目标包)时,MSBuild生成第一个,并发出警告。当构建机器安装了参考程序集,警告消失时,会产生第二个警告。我觉得第二种说法在某种程度上更为正确,但没有任何具体的事实来支持这一点。这两个二进制文件似乎都能工作。

TargetFramework

标识编译特定程序集所依据的.NET Framework版本

TargetFrameworkAttribute属性可以指定FrameworkDisplayName属性,以提供更具描述性的.NET Framework版本字符串,该字符串适合向程序集的客户端显示

资料来源:

FrameworkDisplayName

获取生成程序集所依据的.NET Framework版本的显示名称

资料来源:

下面的例子强调了你提到的第二行的正确性:

以下示例将TargetFrameworkAttribute应用于程序集,并指定这两个属性值以指示程序集是使用.NET Framework 4.5.2生成的

using System;
using System.Runtime.Versioning;

[assembly:TargetFramework(".NETFramework,Version=v4.5.2", 
          FrameworkDisplayName = ".NET Framework, Version 4.5.2")]

namespace MyCompany.Utilities
{
   public class StringLibrary
   {
      // Members defined here.
   }
}

我希望这就澄清了问题。

对于以后访问此页面的任何人,如果想像我一样找到修复空FrameworkDisplayName的方法,您可以按照以下步骤操作:

导航到C:\Users\mudalig\AppData\Local\Temp 查找文件 .NETFramework,版本=[程序集的.net 版本].AssemblyAttributes.cs。如。 .NETFramework,版本=v4.5.1.AssemblyAttributes.cs 打开文件并 检查FrameworkDisplayName元素。如果为空,则将其设置为预期值。例如,FrameworkDisplayName=.NET Framework 4.5.1 //使用制度;运用系统反思;[大会: 全局::System.Runtime.Versioning.TargetFrameworkAttribute.NETFramework,版本=v4.5.1, FrameworkDisplayName=.NET Framework 4.5.1]

关于为什么这可能很重要的一些背景知识。 有时,您需要确保二进制文件是可复制的,即在进行新构建时哈希值应该匹配。如果源或目标计算机的此属性值为空/不正确,则二进制dll exe的元数据将更改,并且与另一个不匹配


我们就是这样,我花了两天的时间试图找到解决办法。希望这对某些人有用。

我的问题是,这有什么区别,如果有的话?正如我所指出的,表示程序集是使用.NET Framework 4.5.2构建的,既用于目标框架,也用于准备就绪的显示名称。让我强调一下:TargetFramework表示程序集,比FrameworkDisplayName重要得多。FrameworkDisplayName表示程序集的名称,不是必需的。