.net 汇编解析

.net 汇编解析,.net,dll,assemblies,.net,Dll,Assemblies,我们为一个为.NET3.5构建的软件创建了一个插件。在这个插件中,我们引用了适用于.NET3.5的第三方.DLL。主软件现在构建为.NET4.0,第三方的.DLL已拆分为两个.DLL 我们想要避免的是使用几乎完全相同代码的两个独立解决方案(一个是针对.NET 4.0构建的,引用4.0 DLL,另一个是针对3.5 DLL构建的)。并非所有的客户都会立即升级到我们为其创建插件的软件的最新版本,有些可能要等上几年 编辑的问题: 有没有办法继续生成引用3.5 DLL的.Net 3.5,然后在运行时执行一

我们为一个为.NET3.5构建的软件创建了一个插件。在这个插件中,我们引用了适用于.NET3.5的第三方.DLL。主软件现在构建为.NET4.0,第三方的.DLL已拆分为两个.DLL

我们想要避免的是使用几乎完全相同代码的两个独立解决方案(一个是针对.NET 4.0构建的,引用4.0 DLL,另一个是针对3.5 DLL构建的)。并非所有的客户都会立即升级到我们为其创建插件的软件的最新版本,有些可能要等上几年

编辑的问题

有没有办法继续生成引用3.5 DLL的.Net 3.5,然后在运行时执行一些程序集解析,以加载两个.Net 4.0 DLL来代替原来的DLL


我们希望/需要继续构建3.5框架,以便主软件的早期版本将继续加载我们的插件。如果我们构建为4.0,则旧版本在尝试加载插件时会出现错误,因为它的构建为更高版本的框架。

如果结构完全相同(包含两个1程序集),则在.NET 4运行时加载.NET 3.5库没有问题。(我在IronScheme中经常这样做,因为我懒得在VS2010上构建)。

如果结构完全相同(查看两个程序集),则在.NET 4运行时加载.NET 3.5库没有问题。(我在IronScheme中经常这样做,因为我懒得在VS2010上构建)

此程序集由比当前加载的运行时更新的运行时生成

很清楚,您的EXE加载了早期版本的CLR。只有.NET 4版本的CLR知道如何加载为目标4生成的程序集。元数据格式在4中已更改,旧的CLR不知道如何读取它

也可以将EXE重新编译为目标4,或者提供一个app.EXE.config文件,强制程序使用较新版本的CLR运行。应该是这样的:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>

需要进行一些测试,.NET 4是高度兼容的,但它确实有一些您可能会意外依赖的错误修复

此程序集由比当前加载的运行时更新的运行时生成

很清楚,您的EXE加载了早期版本的CLR。只有.NET 4版本的CLR知道如何加载为目标4生成的程序集。元数据格式在4中已更改,旧的CLR不知道如何读取它

也可以将EXE重新编译为目标4,或者提供一个app.EXE.config文件,强制程序使用较新版本的CLR运行。应该是这样的:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>


需要进行一些测试,.NET 4是高度兼容的,但它确实有一些您可能会意外依赖的错误修复。

您是否确实尝试过这一点,或者您只是猜测可能存在问题?如果您这样做了,那么错误消息到底是什么?当我尝试加载带有旧版本软件的4.0插件时,会出现以下错误:无法加载程序集。错误详细信息:System.BadImageFormatException:无法加载文件或程序集的file:///C:\用户******\Documents\Visual Studio 2010\Projects\RandomProjects\A2013Testing\bin\Debug\A2013Testing.dll'或其依赖项之一。此程序集由比当前加载的运行时更新的运行时生成,因此无法加载。文件名:'file:///C:\用户******\Documents\Visual Studio 2010\Projects\RandomProjects\A2013Testing\bin\Debug\A2013Testing.dll位于System.Reflection..您是否确实尝试过此方法,或者只是猜测可能有问题?如果您这样做了,那么错误消息到底是什么?当我尝试加载带有旧版本软件的4.0插件时,会出现以下错误:无法加载程序集。错误详细信息:System.BadImageFormatException:无法加载文件或程序集的file:///C:\用户******\Documents\Visual Studio 2010\Projects\RandomProjects\A2013Testing\bin\Debug\A2013Testing.dll'或其依赖项之一。此程序集由比当前加载的运行时更新的运行时生成,因此无法加载。文件名:'file:///C:\用户******\Documents\Visual Studio 2010\Projects\RandomProjects\A2013Testing\bin\Debug\A2013Testing.dll'位于System.Reflection..它不是我们的可执行文件,可执行文件正在尝试加载我们的dll。可执行文件是用4.0构建的,以前的可执行文件是用3.5构建的。我们正在努力使我们的DLL与两者兼容。4.0可执行文件将加载3.5 DLL,但我们的3.5 DLL需要在此版本中引用第三方4.0引用,早期版本中引用3.5 DLL。只有EXE确定将加载哪个版本的CLR。因为它先开始。如果出现此异常,则可以确定是EXE导致了问题。它是为目标3.5而构建的。加载任何4.0 DLL的唯一方法是强制EXE加载CLR版本4。这要求将其构建为目标4或此.exe.config文件。你可能需要和EXE的所有者谈谈来解决这个问题,他们可能不一定对此感到高兴。这不是我们的可执行文件,可执行文件正试图加载我们的DLL。可执行文件是用4.0构建的,以前的可执行文件是用3.5构建的。我们正在努力使我们的DLL与两者兼容。4.0可执行文件将加载3.5 DLL,但我们的3.5 DLL需要在此版本中引用第三方4.0引用,早期版本中引用3.5 DLL。只有EXE确定将加载哪个版本的CLR。因为它先开始。如果出现此异常,则可以确定是EXE导致了问题。它是为目标3.5而构建的。加载任何4.0 DLL的唯一方法是强制EXE加载CLR版本4。这要求将其构建为目标4或此.exe.config文件。您可能需要与EXE的所有者交谈以解决此问题,他们可能会