Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 使用.NET 3.5生成的exe文件无法加载使用.NET 4.5创建的dll?_C#_.net_Dll - Fatal编程技术网

C# 使用.NET 3.5生成的exe文件无法加载使用.NET 4.5创建的dll?

C# 使用.NET 3.5生成的exe文件无法加载使用.NET 4.5创建的dll?,c#,.net,dll,C#,.net,Dll,我有一个使用.NET 3.5版本生成的exe文件。我没有这个源代码,我只有这个exe文件。此exe文件加载某些dll文件。其中一个dll文件是使用.NET 4.5生成的。不能这样做吗? I get error“此程序集由比当前加载的运行时更新的运行时生成,无法加载。” 在我的exe文件配置文件中,所有3个版本都有“supportedRuntime”条目 <supportedRuntime version="v2.0.50727"/> <supportedRuntime vers

我有一个使用.NET 3.5版本生成的exe文件。我没有这个源代码,我只有这个exe文件。此exe文件加载某些dll文件。其中一个dll文件是使用.NET 4.5生成的。不能这样做吗? I get error“此程序集由比当前加载的运行时更新的运行时生成,无法加载。”

在我的exe文件配置文件中,所有3个版本都有“supportedRuntime”条目

<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v4.5"/>


我认为通过添加上述内容,可以帮助开发旧版本的控制台应用程序加载使用新版本开发的dll文件。我说得对吗?如果没有,解决方案是什么?

您似乎需要编译新的程序集引用来创建DLL文件,该文件的框架版本为3.5,与您的应用程序的框架版本3.5兼容。

您似乎需要编译新的程序集引用来创建DLL文件,框架版本为3.5,它与使用framework 3.5版创建的应用程序兼容。

显然,您的DotNet35.exe被CLR 2锁定,当它启动时,它使用CLR 2,而CLR 2不能通过反射使用PluginDotNet45.dll。是的,我想这涉及到反思

根据DotNet35.exe的设计,可能存在以下解决方法: 1.使用.NET Framework 4.5编写一个名为DotNet45.exe的新exe,此exe将作为普通程序集引用DotNet35.exe。 2.DotNet45.exe将使用DotNet35.exe中的一些函数来显示GUI和加载插件,包括使用.NET 4.5构建的插件

如果DotNet35.exe没有许多可见函数可供使用,则可以在通过ILSpy检查后使用反射调用一些私有函数


另一种方法是将DotNet35.exe反编译为C代码,然后使用.NET4.5进行编译

显然,您的DotNet35.exe被CLR 2锁定,当它启动时,它使用CLR 2,而CLR 2不能通过反射利用PluginDotNet45.dll。是的,我想这涉及到反思

根据DotNet35.exe的设计,可能存在以下解决方法: 1.使用.NET Framework 4.5编写一个名为DotNet45.exe的新exe,此exe将作为普通程序集引用DotNet35.exe。 2.DotNet45.exe将使用DotNet35.exe中的一些函数来显示GUI和加载插件,包括使用.NET 4.5构建的插件

如果DotNet35.exe没有许多可见函数可供使用,则可以在通过ILSpy检查后使用反射调用一些私有函数


另一种方法是将DotNet35.exe反编译为C代码,然后使用.NET4.5进行编译

我不知道为什么每个人都说这件事做不到,因为它肯定可以做到。关于配置文件,有两件事需要解决。一个是,最首选的运行时必须排在第一位。如果将.NET4.5放在最后一个位置,它将尝试首先加载.NET2.0运行时,如果安装了,则使用它。尝试加载不兼容的dll时,结果是BadImageFormatException。第二个问题是.NET4.5是对.NET4.0的就地升级,因此语法略有不同。正确的格式如下:


请注意
sku
属性的使用。例如,如果您需要使用4.0客户端配置文件,则中有更多信息


现在您没有编写exe,因此您实际上不知道它是否能在.NET4.5中实际工作(可能不会),因此这有点危险。买主注意。

我不知道为什么每个人都说这是不可能的,因为它肯定是可以做到的。关于配置文件,有两件事需要解决。一个是,最首选的运行时必须排在第一位。如果将.NET4.5放在最后一个位置,它将尝试首先加载.NET2.0运行时,如果安装了,则使用它。尝试加载不兼容的dll时,结果是BadImageFormatException。第二个问题是.NET4.5是对.NET4.0的就地升级,因此语法略有不同。正确的格式如下:


请注意
sku
属性的使用。例如,如果您需要使用4.0客户端配置文件,则中有更多信息


现在您没有编写exe,因此您实际上不知道它是否能在.NET4.5中实际工作(可能不会),因此这有点危险。买主注意。

一些研究表明,由于.NET框架不具有前向兼容性,因此这个问题是不可避免的。您需要使用与目标应用程序兼容的框架版本(可能是3.5)编译程序集。不,配置行不会影响应用程序加载应用程序的能力。一些研究表明,这个问题是不可避免的,因为.NET framework是不向前兼容的。您需要使用与目标应用程序兼容的框架版本(可能是3.5)编译程序集。不,配置行不会影响应用程序加载应用程序的能力。