【问题标题】:Using C# ResourceWriter to target different .NET versions使用 C# ResourceWriter 定位不同的 .NET 版本
【发布时间】: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 支持有关。

标签: c# .net


【解决方案1】:

对于其他想要做类似事情的人,我已经找到了一种方法来做到这一点。我已经更改了我的工具,使其针对 ('targets') .NET v3.5 构建,并且我使用它的 app.config 文件中的条目控制该工具被加载到哪个 CLR,如下所示。通过切换配置文件中条目的顺序,我现在能够从 .NET v3.5 源程序集生成 CLR 2.0 资源程序集,并从 .NET v4.0 源程序集生成 CLR 4.0 资源程序集。

<?xml version="1.0"?>
<configuration>
<startup>
  <supportedRuntime version="v4.0"/>
  <supportedRuntime version="v2.0.50727"/>
</startup></configuration>

关于 app.config 条目的好链接:https://msdn.microsoft.com/en-us/library/jj152935%28v=vs.110%29.aspx

事后看来,我可能应该在前面对问题的描述中提到我不需要更改源程序集与其资源程序集之间的 CLR 目标,只需要两者之间的一致性。

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2019-04-08
    • 2021-09-05
    • 2011-02-09
    相关资源
    最近更新 更多