使用C#ResourceWriter针对不同的.NET版本
我有一个以编程方式创建.NET资源程序集的工具,该工具是用C#编写的,并使用.NET v4.0进行编译。有时,此工具需要生成以.NET v3.5为目标的资源程序集。在线文档建议,这可以使用我用来编写资源的ResourceWriter对象的TypeNameConverter属性来实现,但我没有找到一个实际实现的示例。任何帮助都将不胜感激。对于任何想做类似事情的人,我已经找到了一种方法。我已经更改了我的工具,因此它是根据('targets').NETV3.5构建的,并且我使用它的app.config文件中的条目控制该工具加载到哪个CLR中,如下所示。通过切换配置文件中条目的顺序,我现在能够从.NET v3.5源程序集生成CLR 2.0资源程序集,从.NET v4.0源程序集生成CLR 4.0资源程序集使用C#ResourceWriter针对不同的.NET版本,c#,.net,C#,.net,我有一个以编程方式创建.NET资源程序集的工具,该工具是用C#编写的,并使用.NET v4.0进行编译。有时,此工具需要生成以.NET v3.5为目标的资源程序集。在线文档建议,这可以使用我用来编写资源的ResourceWriter对象的TypeNameConverter属性来实现,但我没有找到一个实际实现的示例。任何帮助都将不胜感激。对于任何想做类似事情的人,我已经找到了一种方法。我已经更改了我的工具,因此它是根据('targets').NETV3.5构建的,并且我使用它的app.config
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup></configuration>
关于app.config条目的良好链接:
事后看来,我可能应该在前面的问题描述中提到,我不需要更改源程序集与其资源程序集之间的CLR目标,只需要两者之间的一致性。这是不可能的。例如,不能将v4.0.0.0 System.Drawing.Bitmap转换为v2.0.0.0版本。您将始终得到v4版本,CLR始终重新映射System.Drawing.dll引用。如果消费者是以3.5为目标的应用程序,那么结果就很糟糕。您需要构建此工具的两个版本。谢谢Hans。您认为我误解了ResourceWriter.TypeNameConverter的文档吗?“获取或设置一个委托,该委托通过使用限定的程序集名称,使资源程序集能够写入.NET Framework 4之前的.NET Framework目标版本。”我以前被多科女士误导过,所以这不是不可能的……也许不是,但这只是谜题的一小部分。该对象还需要序列化为.NET 2.0.0.0对象。这需要愚弄二进制格式化程序。VisualStudio在创建一个以旧版本为目标的项目时需要这样做,它是如何做到这一点的是一个保密的秘密。可能与进程内并行CLR支持有关,而非托管应用程序(如VS)可以利用这些支持。