Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#ResourceWriter针对不同的.NET版本_C#_.net - Fatal编程技术网

使用C#ResourceWriter针对不同的.NET版本

使用C#ResourceWriter针对不同的.NET版本,c#,.net,C#,.net,我有一个以编程方式创建.NET资源程序集的工具,该工具是用C#编写的,并使用.NET v4.0进行编译。有时,此工具需要生成以.NET v3.5为目标的资源程序集。在线文档建议,这可以使用我用来编写资源的ResourceWriter对象的TypeNameConverter属性来实现,但我没有找到一个实际实现的示例。任何帮助都将不胜感激。对于任何想做类似事情的人,我已经找到了一种方法。我已经更改了我的工具,因此它是根据('targets').NETV3.5构建的,并且我使用它的app.config

我有一个以编程方式创建.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资源程序集

<?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)可以利用这些支持。