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
你没有给我们太多的继续,但我将使用我的通灵调试能力.
我猜测没有得到异常的计算机 - 让我们称之为计算机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则不会.
最明显的一个问题是"为什么它抛出一个异常?",但你有没有给我们任何地方靠近足够的信息来试图从那个猜测.
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |