【发布时间】:2015-04-08 05:00:13
【问题描述】:
我有一个以编程方式创建 .NET 资源程序集的工具,该工具是用 C# 编写并使用 .NET v4.0 编译的。有时,此工具需要生成面向 .NET v3.5 的资源程序集。在线文档建议可以使用我用来编写资源的 ResourceWriter 对象的 TypeNameConverter 属性来完成此操作,但我没有找到实际如何完成此操作的示例。任何帮助将不胜感激。
【问题讨论】:
-
这是不可能的。例如,您不能将 v4.0.0.0 System.Drawing.Bitmap 转换为 v2.0.0.0 版本。您总是会得到 v4 版本,CLR 总是重新映射 System.Drawing.dll 引用。如果消费者是针对 3.5 的应用程序,那么结果会很糟糕。您需要构建此工具的两个版本。
-
谢谢汉斯。您是否认为我误解了 ResourceWriter.TypeNameConverter 的文档 - “获取或设置一个委托,该委托允许使用限定的程序集名称来编写 .NET Framework 4 之前的 .NET Framework 的目标版本的资源程序集。”我之前被 MS doco 误导过,所以这不是不可能的......
-
可能不会,但这只是拼图中的一小部分。该对象也需要序列化为 .NET 2.0.0.0 对象。这需要欺骗 BinaryFormatter。当你创建一个针对旧版本的项目时,Visual Studio 需要这样做,它是如何做到的,这是一个保守的秘密。可能与像 VS 这样的非托管应用程序可以利用的进程内并行 CLR 支持有关。