一台机器上的通用GDI +错误,但不是另一台机器上的错误

raf*_*ale 2 .net c# gdi+ exception

尝试使用ImageFormat参数将Bitmap保存到MemoryStream时,我收到一个通用的GDI +错误.

奇怪的是,这只发生在我的一台计算机上,而不是其他计算机上.我注意到的唯一区别是获得异常的计算机在App.config文件中也需要以下内容:

<startup useLegacyV2RuntimeActivationPolicy="true">
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

没有它,它无法启动应用程序(它只是一个托管Windows服务).据我所知,两台计算机都有相同的.NET版本,但我可能没有正确检查.可能是什么导致了这个?

编辑:我没有包含代码,因为我几乎可以肯定这是由其他东西引起的.无论哪种方式,这里都是抛出异常的片段:

MemoryStream stream = new MemoryStream();
Image image = Image.FromStream(new MemoryStream(File.ReadAllBytes(fullpath))); //JPG
image.Save(stream, image.RawFormat); //works fine
//image.Save(stream, ImageFormat.Png); //throws generic GDI+ error
Run Code Online (Sandbox Code Playgroud)

我还应该提到,获得异常的机器运行32位Vista,而其他运行不运行64位Windows 7.每台机器在运行之前编译应用程序本身.

最重要的是,所有机器都有useLegacyV2RuntimeActivationPolicy="true"他们的App.config文件,但只有获得GDI +错误的人才是绝对需要的.

另外,以下是我在两台机器上安装的.NET版本:

可以运行,使用64位Windows 7: 1.0.3705,1.1.4322,2.0.50727,3.0,3.5,4.0.30319,Framework64:2.0.50727,3.0,3.5,4.0.30319

使用32位Vista获取错误: 1.0.3705,1.1.4322,2.0.50727,3.0,3.5,4.0.30319

Joe*_*ite 5

你没有给我们太多的继续,但我将使用我的通灵调试能力.

我猜测没有得到异常的计算机 - 让我们称之为计算机A - 安装了.NET 2.0,3.0和/或3.5(也可能是.NET 4.0;这并不重要这里).我还猜测得到异常的程序集是为.NET 3.5(或3.0或2.0)编译的.

我也猜测得到例外的计算机 - 我们称之为计算机B - 没有安装.NET 3.5,但确实有.NET 4.0.(这是我知道的唯一原因,需要你发布的app.config条目.)

让我进一步猜测两台机器运行相同的操作系统,以及相同的OS操作系统(32位操作系统或64位操作系统).我在这里走出困境,但我希望如果它们不同,那么在提出问题时你会包含这种至关重要的细节.

如果所有这些猜测都是正确的,那么明显的结论是.NET改变了它在2.0 .NET运行时之间的行为(这是在计算机A上使用的,因为.NET 2.0,3.0和3.5都在2.0运行时运行)和4.0 .NET运行时(这是在计算机B上使用的,因为您在app.config中特别请求了它).当您尝试执行任何操作时,.NET 4.0会抛出异常,而.NET 3.5则不会.

最明显的一个问题是"为什么它抛出一个异常?",但你有没有给我们任何地方靠近足够的信息来试图从那个猜测.

  • 我在原帖中添加了一些细节,包括代码段.不包括之前的道歉. (2认同)