.NET 发布者策略目标框架

Posted

技术标签:

【中文标题】.NET 发布者策略目标框架【英文标题】:.NET Publisher Policy Target Framework 【发布时间】:2017-09-07 08:22:42 【问题描述】:

总结

如何创建一个发布者策略程序集,该程序集以与重定向程序集相同的框架版本为目标?

TL;DR

我有一个Assembly.dll,版本为1.x.y.0,我还有一个名为policy.1.0.Assembly.dll 的发布者策略,它将版本1.0.0.0-1.x.y.0 重定向到1.x.y.0

Assembly.dll 面向 .NET Framework 3.5。我是否认为policy.1.0.Assembly.dll 也应该针对 .NET Framework 3.5,以便在所有框架 3.5+ 上正常工作?如果是,我该如何创建这样的发布者策略程序集?我在 Assembly Linker (AL) 上看不到任何相关的命令行开关。

目前,当我对程序集进行 GAC 时,Assembly.dll\Windows\assembly 结束,policy.1.0.Assembly.dll\Windows\Framework.NET\assembly 结束。 ILDASM 向我展示了目标运行时是不同的:

Assembly.dll

// Metadata version: v2.0.50727
.assembly extern mscorlib

  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0

.assembly extern System

  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0

policy.1.0.Assembly.dll

// Metadata version: v4.0.30319
.assembly extern mscorlib

  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .hash = (B6 24 5D 64 2D 23 95 0B 50 19 B4 DC 19 4B 9A E8   // .$]d-#..P....K..
           B9 FF C0 53 )                                     // ...S
  .ver 4:0:0:0

【问题讨论】:

【参考方案1】:

使用来自C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 的Assembly Linker 似乎会产生一个针对正确运行时的policy.1.0.Assembly.dll

// Metadata version: v2.0.50727
.assembly extern mscorlib

  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .hash = (15 3B C0 4F 38 2D 09 20 CC A2 58 01 EE B1 AB E2   // .;.O8-. ..X.....
           D2 D0 C5 11 ) 
  .ver 2:0:0:0

虽然这似乎符合我的要求,但不清楚是否:

确实有必要。 较旧的 AL.EXE 将与 Visual Studio 一起提供多长时间。

Lucian 的 VBlog 帮助我了解了 SDK 工具的组织方式:

https://blogs.msdn.microsoft.com/lucian/2008/11/14/where-are-the-sdk-tools-where-is-ildasm/

【讨论】:

以上是关于.NET 发布者策略目标框架的主要内容,如果未能解决你的问题,请参考以下文章

如何使用多个目标框架测试 .NET 库

将目标框架从 .NET 3.5 更改为 .NET 4.0

.net 将 API 与不同的目标框架结合在一起

编译为目标 4.6.1 框架的 VB.NET 应用程序无法在只有 4.8 .Net 框架的计算机上成功运行

如何在 Visual Studio 中选择 .NET 4.5.2 作为目标框架

如何在 Visual Studio 中切换 .NET Core 项目的目标框架