将.NET项目从4.5转换为4.0最简单的方法是什么?

6

我有一个使用.NET 4.5构建的应用程序,其中引用了一堆使用4.5构建的库,这些库本身又引用了4.5等版本的库。我试图将该应用程序分发给一个用户组,但是他们安装了4.0版本,并且无法运行可执行文件,因为他们遇到了MissingMethodException(缺少方法异常)。

Method not found: 'System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid)'.

因为我们可能会遇到升级每个用户到4.5的困难(因为他们的机器上没有管理员权限,需要单独进行升级请求),所以我在寻找一种将项目重新构建为4.0的简单方法。这似乎要求我重新构建每个库及其引用的库到4.0版本;有没有比逐个库进行建立4.0版本更简单的方法呢?我想也许有一个“重建目标框架中所有引用库”的一键选项或类似选项。

2
不,你必须在每个单独的项目上更改框架目标。我想你可以编写一个使用XDocument来更改项目文件的小程序,但我怀疑它是否更快。确保客户知道你测试和支持的版本。这与你可以构建的版本无关。 - Hans Passant
4个回答

4
当我使用Visual Studio时,我右键单击项目,更改框架,修复引用并重新编译。通常很简单。

如果项目没有依赖于其他4.5 DLL,则此方法可行。当我重新编译时,每个引用都会给出以下警告:“无法解析主引用“NameOfReferencedDLL,Version=1.0.0.0,Culture=neutral,processorArchitecture=MSIL”,因为它是针对“.NETFramework,Version=v4.5”框架构建的。这是比当前目标框架“.NETFramework,Version=v4.0”更高的版本。”并且来自该引用的所有类都不可用。 - sigil
1
所以,您首先必须对依赖项执行相同的操作。 - John Saunders

4
如果你的项目依赖于 .Net 4.5 DLLs,那么如果你想成功降级你的项目,你还需要获取这些DLL的 .Net 4.0 版本。一个 .Net 项目只能引用与引用程序集相同版本的 .Net DLLs。
最简单的方法是使用类似 NuGet 的工具来管理你的依赖项。请注意,在 VS 中更改项目的目标框架版本后,你需要使用 NuGet 卸载并重新安装依赖项,因为 NuGet 不会在更改目标框架版本时自动执行此操作。
当然,如果所有依赖项都是你自己的代码,并且你不会通过像 NuGet 这样的依赖管理系统发布它,那么你还需要将所有其他代码降级到 .Net 4.0。

1
请查看此MSDN页面,以便在不出现问题的情况下将您的项目正确切换到较低的目标框架!就版本而言,它有点过时,但是所描述的过程是相同的!

这不会起作用,因为我有对其他4.5项目的引用,请参见我上面对安德鲁的回复。 - sigil
你需要重建你的引用到4.0框架,或者保持项目在4.5框架下。在这种情况下,你需要找到一种方法来确保所有引用和项目的框架一致性。 早期的框架可能是好的(例如项目是4.5,引用是3.5),但反之则不行。 - Tommaso Belluzzo

0

这是基于我的经验。我有一个最初创建在.net framework 4.5的应用程序,但我想将其转换为.net framework 4.0。我最初创建了一个新项目4.0,然后复制并粘贴了我之前应用程序中的所有表单和控件,它可以正常运行。Framework 4.5使用Aero2,而4.0则使用Aero...祝你好运:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接