发布时间:2023-07-23 09:30
The .NET Framework 3.5 SP1 included a bunch of new features, but as a Service Pack it also included a number of bug fixes and many improvements. These fixes included all aspects of the .NET Framework from ASP.NET to WPF and the CLR.
.NET Framework 3.5 SP1包括许多新功能,但作为Service Pack,它还包含许多错误修复和许多改进。 这些修复包括从ASP.NET到WPF以及CLR的.NET Framework的各个方面。
Almost certainly not.
几乎可以肯定不是。
Remember that 3.5 (and 3.0 before it) all have the 2.0 CLR at their core. If you want excessive detail on this, I've got it. Because the 2.0 CLR is the engine underneath and 3.0 and 3.5 are primarily additive*, there's inherently high application compatibility between these releases.
请记住,3.5(及其之前的3.0)的核心都是2.0 CLR。 如果您想对此进行详细说明,我已经掌握了。 因为2.0 CLR是其引擎,而3.0和3.5主要是加法*,所以这些版本之间固有地具有很高的应用程序兼容性。
Realize that 2.0, 3.0 and 3.5 are not different products, no matter what anyone says. They are not different "Side By Side" releases, like 1.x and 2.0 were. They are evolutionary; if anything, our naming could have been better (you think?), but rather each adds functionality to the one before it. They are really additive releases to the same core product.
认识到2.0、3.0和3.5并不是不同的产品,无论别人怎么说。 它们与1.x和2.0一样,与“ Side By Side”版本不同。 它们是进化的; 如果有的话,我们的命名本来可以更好(您认为呢?),但是每个命名都为之前的命名增加了功能。 它们实际上是同一核心产品的附加发行版。
We’re committed to application compatibility. However you may have heard or reported issues or bugs around 3.5 SP1 and I’ll go into how we’re dealing with those below. Most of these are corner-case/edge-case situations.
我们致力于应用程序兼容性。 但是,您可能已经听说或报告了有关3.5 SP1的问题或错误,我将在下面介绍如何处理这些问题。 其中大多数是极端情况/边缘情况。
It may be cold comfort when it’s your bug and your company and it sounds like a marketing line, but it’s true. There are a lot of resources working to minimize impact to you.
当这是您的虫子和您的公司时,可能会感到很冷淡,听起来像是一条营销路线,但这是事实。 有很多资源可以最大限度地减少对您的影响。
I’ve now been on both sides, when working in a large ISV and trying to get a hotfix, and now on the inside trying to keep compatibility while keeping things secure and correct. There is a massive amount of unit and integration testing that goes into the .NET Framework (that includes all technologies under that umbrella). That means that every effort is made not to break stuff. That’s why Visicalc still runs nicely on my Vista x86 machine (although I can’t run OS 9 apps on OS X anymore, interestingly ;) )
在大型ISV中工作并尝试获取修补程序时,我现在一直处于两面,现在在内部又在保持兼容性的同时试图确保事物的安全性和正确性。 .NET Framework中有大量的单元和集成测试(包括该伞下的所有技术)。 这意味着将尽一切努力不破坏东西。 这就是为什么Visicalc在我的Vista x86机器上仍然可以很好地运行的原因(有趣的是,尽管我不再能够在OS X上运行OS 9应用程序;))
Software testing is a combinatorial problem, and as such all software has bugs, but sometimes when a bug comes back it’s called a “regression.” That means it was fixed before, and now it doesn’t. Sometimes folks call a new bug a regression their software worked before and it doesn’t now. This might be because they relied on an incorrect behavior that was later corrected, or that it was just a bug.
软件测试是一个组合问题,因此所有软件都存在错误,但有时当错误返回时,称为“回归”。 这意味着它以前是固定的,现在没有。 有时人们称新错误是他们的软件以前使用过的回归,而现在则不行。 这可能是因为他们依赖的错误行为后来得到纠正,或者仅仅是一个错误。
It IS possible that something could break, so as with all SP’s you should do compatibility testing to make sure you’re not hitting an edge case. If you are affected by a bug at some point, we’re trying to get you a very fast response. Notice in the table below there’s a “How Found” column. You can report on Forums, contact PSS or use Connect to report bugs.
可能会破坏某些东西,因此对于所有SP,都应进行兼容性测试,以确保不会遇到任何问题。 如果您在某个时候受到错误的影响,我们正在努力为您提供快速的响应。 请注意,下表中有一个“如何找到”列。 您可以在论坛上报告,联系PSS或使用Connect报告错误。
Later this year, probably November-ish, the .NET Framework 3.5 SP1 will begin show up on Windows Update in a rolling and throttled fashion so that all machines that have .NET 2.0 or higher will be automatically upgraded to 3.5 SP1.
今年晚些时候(大概是11月),. NET Framework 3.5 SP1将以滚动和限制方式开始出现在Windows Update上,以便所有具有.NET 2.0或更高版本的计算机都将自动升级到3.5 SP1。
If you’re an ISV or Hoster, you might be concerned that you’d wake up one day and find machines updated to 3.5 SP1 via Windows Update before these bugs are fixed.
如果您是ISV或Hoster,则可能会担心您有一天会醒来,并且需要通过Windows Update查找更新为3.5 SP1的计算机,然后才能修复这些错误。
There will be an update/patch made to .NET 3.5 SP1 before it goes live on Windows Update. We are holding SP1 on Windows Update (Microsofties call it “WU” or “Woo”) until this patch is finalized.
在Windows Update上上线之前,将对.NET 3.5 SP1进行更新/修补。 我们将在Windows Update上保留SP1(Microsofties称之为“ WU”或“ Woo”),直到此补丁完成为止。
That patch is called a GDR, or General Distribution Release, coming for .NET 3.5 SP1. A GDR is a Microsoft TLA (Three Letter Acronym) for an update that is for everyone. This update’s goal is to fix bugs that have been found in .NET 3.5 SP1. Many of these bugs were found by the community and reported on the Connect site.
该修补程序称为.GDR,即.NET 3.5 SP1的通用发行版本。 GDR是适用于每个人的更新的Microsoft TLA(三字母缩写)。 此更新的目的是修复.NET 3.5 SP1中发现的错误。 这些错误中有许多是由社区发现的,并在Connect站点上进行了报告。
We won’t push .NET 3.5 SP1 to WU until everyone feels confident it’s solid.
除非每个人都确信它是可靠的,否则我们不会将.NET 3.5 SP1推向WU。
I know if you have a particular bug on Connect that you’re watching, you might be a little frustrated and be wondering what its status is. We’re working on getting the Connect Bugs updated and lots of folks (myself included) are trying at every turn to increase transparency. This blog post is an example. If they stop abruptly, I’ve finally been fired for them. ;)
我知道如果您正在观看Connect上的特定错误,您可能会感到沮丧,并想知道它的状态是什么。 我们正在努力更新连接错误,许多人(包括我自己)正竭尽全力提高透明度。 这篇博客文章就是一个例子。 如果他们突然停下来,我终于被他们开除了。 ;)
Sometimes your app might break and the issue isn’t “fixed,” but closed with “By Design” or “Workaround.” This can be frustrating (believe me, I know) but some fixes can break other things, and there’s always security to consider. In the near future I’m going to try to dig into some really icky details of a few of the more interesting bugs and get some color commentary on them. I’m going to encourage the other teams to do the same. I know the BCL team had a few interesting issues and have expressed an interested in digging in and blogging some wonky technical details.
有时,您的应用可能会坏掉,问题没有得到“解决”,而是通过“按设计”或“解决方法”解决了。 这可能令人沮丧(相信我,我知道),但是某些修复程序可能会破坏其他事情,并且始终需要考虑安全性。 在不久的将来,我将尝试挖掘一些更有趣的bug的某些真正棘手的细节,并对它们进行一些颜色注释。 我将鼓励其他团队也这样做。 我知道BCL团队有一些有趣的问题,并且表示有兴趣挖掘和写一些怪异的技术细节。
If you don’t want a bunch of details, you can stop reading now.
如果您不想获取大量细节,可以立即停止阅读。
In the interested on transparency, here’s some of the bugs I’m tracking for this GDR. Note you can find most, if not all, of these bugs/issues on Connect and each team will be updating those with as much details as they have. Watch the issues there for the most up-to-date information we've got. If you feel something isn't getting attention, let me know and I'll poke the right manager.
在对透明性感兴趣的地方,以下是我为此GDR跟踪的一些错误。 请注意,您可以在Connect上找到大多数(如果不是全部)这些bug /问题,每个团队都将尽可能详细地更新它们。 观看那里的问题,以获取我们最新的信息。 如果您觉得有些事情没有引起注意,请告诉我,我会请合适的经理。
Title |
Product Unit |
Details |
How Found |
.NET 3.5 issue - Dynamic Data Issue |
ASP.NET |
Dynamic Data fails on Entity Framework data models that contain 1->0..1 and *->1 database relations with an error like "'System.Web.UI.WebControls.EntityDataSourceWrapper' does not contain a property with the name 'Orders.OrderID'". These types of relationships occur in many databases including Northwind and AdventureWorks. The error is caused by a naming mismatch that Dynamic Data has with the wrapper objects being returned by the EntityDataSource. We have a temporary fix available at: http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16367 which replaces the data model provider with one that names the properties correctly. |
3rd party Forum |
Hidden files/folders inside App_Browsers are not ignored |
ASP.NET |
This customer applied FrontPage Server Extensions (FPSE) to the site. Normal behavior is to add metadata files inside _vti_cnf folders for each file in the site. Therefore, inside App_Browsers folder, after applying FPSE, we get a hidden folder called _vti_cnf that contains the file called BrowserFile.browser Trying to parse that file will result in this error, since this is not a real .browser file, but instead just a metadata file. The workaround for now is to delete _vti_cnf folder, but we'll fix this. |
PSS DTS Issue |
After installing .NET 3.5 SP1, a web site using a derived version of the UpdateProgress control may encounter the following exception: “A ProgressTemplate must be specified on UpdateProgress control with ID ‘id’.” |
ASP.NET |
In the .NET Framework 3.5, the UpdateProgress control enforced the requirement of a ProgressTemplate from its PreRender routine. A derived UpdateProgress control could subvert that requirement by overriding OnPreRender in the derived control, and avoiding calling base.OnPreRender. In the .NET Framework 3.5 SP1, the UpdateProgress control now uses CreateChildControls to instantiate the ProgressTemplate, causing the requirement to be enforced at a different point in the page life cycle, and preventing the OnPreRender technique from subverting the check. | Other |
SGEN and Obsolete attribute | WCF |
ASMX web methods do not return serialized results. What the customer does is to SGEN an assembly that contains some types with [Obsolete(IsError = true)]. What he sees is SGEN throwing an error and refusing to generate a serialization assembly. Here is the message you get from SGEN: Microsoft (R) Xml Serialization support utility [Microsoft (R) .NET Framework, Version 2.0.50727.1432] Copyright (C) Microsoft Corporation. All rights reserved. Error: Unable to generate a temporary class (result=1). error CS0619: 'SGenTest.Program' is obsolete: ‘Testing.' error CS0619: 'SGenTest.Program' is obsolete: 'Testing.' |
Other |
.NET 3.5 SP1: JIT generates incorrect code in managed C++ edge case |
CLR |
This is caused by JIT optimization changes we made in 3.5SP1. We promote some fields to registers when we shouldn't. Limited to structs or classes with four or fewer scalar fields, none of which are managed object references.The scope is additionally reduced in that this bug only manifests when using the cpblk or initblk instructions, which are only emitted by the managed C++ compiler.The issue does apply to both JITted and NGEN'd code. |
MSConnect |
Obfuscated 1.1 assemblies may fail if they override certain methods in the Framework |
CLR |
1.1 code that used to run successfully on 2.0 will no longer run on 3.5 SP1 (throws a MissingMethodException). The underlying problem is as follows. Let’s say you have a 1.1 Framework type that overrode a virtual method, then stopped overriding it in 2.0. This should not be a breaking change, because an implementation of the method still exists (somewhere earlier in the inheritance hierarchy). However, if a customer overrode that method, built against 1.1, then obfuscated the code, the obfuscated code no longer works when run against 2.0 SP2/3.5 SP1. Obfuscators that are using undocumented techniques to accomplish their task tend to get broken when we optimize things. Workaround is to not obfuscate these few methods, usually by marking them with an attribute. Long term workaround is for the obfuscator to play nice. |
3rd party Forum |
How .Net 3.5 SP1 broke Rhino Mocks (ExecutionEngineException...) |
CLR |
This bug has been reported to break Rhino Mocks, an open-source, mock testing framework.The specific impact to Rhino Mocks is that it breaks its support for F#, C++ and Spec# It has 71 validations and 119 ratings (avg. 4.9), which is high for a Connect bug http://www.ayende.com/Blog/archive/2008/08/13/How-.Net-3.5-SP1-broke-Rhino-Mocks.aspx is the blog which discusses the issue with many community comments This is likely the source of much of the validations. In 3.5 SP1 we removed a null check as a side-effect of changes we made to support ASLR. As a result, a failure case we used to handle now results in an AV in the runtime which manifests as an ExecutionEngineException and process termination |
MSConnect |
Serialization hangs or throws an OutOfMemoryException |
CLR |
This issue is also mentioned on the Rhino Mocks web site, where another breaking change in 3.5SP1 was reported. It is unclear as to whether or not this issue also breaks Rhino Mocks test software. Due to changes in the type system, types with the following criteria:Generic type instantiated with a reference typeImplements ISerializableContains a static field. |
MSConnect |
AutoCommit behavior change in Oracle Transactions in .Net Framework 2.0 SP2 |
DPR |
Existing applications which rely on transaction behavior to work correctly will break causing data corruption. |
MSConnect |
EntityDataSource runtime: Not able to display Dynamic Data's FK Ids in a 1:0..1 relationship |
DPR |
This breaks web sites/applications created with ASP.NET Dynamic Data because Dynamic Data assumes the property descriptors exist and uses them to obtain labels for their links. The only known workaround requires manually editing Dynamic Data's templates (for wich each site/app has private copies) to capture the exception. The exception generally of the form: [HttpException (0x80004005): DataBinding: 'System.Web.UI.WebControls.EntityDataSourceWrapper' does not contain a property with the name 'Manager'.] |
3rd party Forum |
SaveChanges doesn't support inserting an entity and binding as a single operation |
DPR |
If the resource takes part in a relationship (e.g. 1:1), then while inserting a new instance of the resource, we need to send the link also, since the link is required at the database level. The client does not send the links while inserting such resources |
3rd party Forum |
DataServiceContext: DeleteObject on an entity with a link fails |
DPR |
This impacts deletion of any resource which has reference properties. A link for a reference property should never be in Added or Deleted state. Instead, it should always be modified with reference target to null in case of delete/non-null in case of add/update. |
3rd party Forum |
.NET 3.5 SP1 breaks use of WPF under IIS |
WPF |
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361469 | MSConnect |
Relative Hyperlinks inside XPS documents broken and causes app to Crash |
WPF |
Fixed. |
MSConnect |
Regression: Geometry.Combine creates more points/segments than before in 3.5 sp1 |
WPF |
Performance regression in scenarios with Geometry (drawn shapes). |
Other |
标题 |
产品单位 |
细节 |
如何找到 |
.NET 3.5问题-动态数据问题 |
ASP.NET |
在包含1-> 0..1和*-> 1数据库关系的Entity Framework数据模型上,动态数据失败,并显示错误消息,例如“'System.Web.UI.WebControls.EntityDataSourceWrapper'不包含名称为'Orders'的属性.OrderID'”。 这些类型的关系发生在许多数据库中,包括Northwind和AdventureWorks。 该错误是由动态数据与EntityDataSource返回的包装对象的命名不匹配引起的。 我们提供了一个临时修复程序,网址为: http : //www.codeplex.com/aspnet/Release/ProjectReleases.aspx? ReleaseId = 16367,该修复程序将数据模型提供程序替换为正确命名属性的提供程序。 |
第三届论坛 |
App_Browsers内部的隐藏文件/文件夹不会被忽略 |
ASP.NET |
该客户将FrontPage服务器扩展(FPSE)应用到该站点。 正常行为是为站点中的每个文件在_vti_cnf文件夹内添加元数据文件。 因此,在应用FPSE之后的App_Browsers文件夹中,我们得到一个名为_vti_cnf的隐藏文件夹,其中包含名为BrowserFile.browser的文件。尝试解析该文件将导致此错误,因为这不是真正的.browser文件,而只是一个元数据文件。 目前的解决方法是删除_vti_cnf文件夹,但我们将解决此问题。 |
PSS DTS问题 |
安装.NET 3.5 SP1之后,使用UpdateProgress控件的派生版本的网站可能会遇到以下异常:“必须在ID为'id'的UpdateProgress控件上指定一个ProgressTemplate。” |
ASP.NET |
在.NET Framework 3.5中,UpdateProgress控件从其PreRender例程强制执行对ProgressTemplate的要求。 派生的UpdateProgress控件可以通过重写派生控件中的OnPreRender来避免该要求,并避免调用base.OnPreRender。 在.NET Framework 3.5 SP1中,UpdateProgress控件现在使用CreateChildControls实例化ProgressTemplate,从而导致在页面生命周期的不同点强制执行要求,并防止OnPreRender技术破坏检查。 | 其他 |
SGEN和过时的属性 | 世界足球联合会 |
ASMX Web方法不返回序列化的结果。 客户要做的是对包含某些类型为[Obsolete(IsError = true)]的类型的装配进行SGEN。 他看到的是SGEN抛出错误并拒绝生成序列化程序集。 这是从SGEN获得的消息:Microsoft(R)Xml序列化支持实用程序[Microsoft(R).NET Framework,版本2.0.50727.1432]版权所有(C)Microsoft Corporation。 版权所有。 错误:无法生成临时类(结果= 1)。 错误CS0619:“ SGenTest.Program”已过时:“正在测试”。 错误CS0619:“ SGenTest.Program”已过时:“正在测试”。 |
其他 |
.NET 3.5 SP1:JIT在托管C ++边缘情况下生成不正确的代码 |
CLR |
这是由我们在3.5SP1中进行的JIT优化更改引起的。 在不应该的时候,我们会推广一些字段进行注册。 仅限于具有四个或更少标量字段的结构或类,这些标量字段都不是托管对象引用。此作用域的范围进一步缩小,因为该错误仅在使用cpblk或initblk指令时才显示,这些指令仅由托管C ++编译器发出。 该问题确实适用于JITted和NGEN的代码。 |
MSConnect |
如果混淆的1.1程序集覆盖了框架中的某些方法,则可能会失败 |
CLR |
以前在2.0上成功运行的1.1代码将不再在3.5 SP1上运行(引发MissingMethodException)。 潜在的问题如下。 假设您有一个1.1框架类型,它将覆盖虚拟方法,然后在2.0中停止对其进行覆盖。 这不应该是一个重大更改,因为该方法的实现仍然存在(继承层次结构中的某个较早位置)。 但是,如果客户改用针对1.1构建的该方法,然后对代码进行混淆,则针对2.0 SP2 / 3.5 SP1运行时,混淆的代码将不再起作用。 当我们优化事物时,使用无证技术来完成任务的混淆器往往会崩溃。 解决方法是不要混淆这几种方法,通常是通过使用属性标记它们。 长期的解决方法是使混淆器发挥作用。 |
第三届论坛 |
.Net 3.5 SP1如何破坏Rhino Mocks(ExecutionEngineException ...) |
CLR |
据报道,该错误破坏了开源的模拟测试框架Rhino Mocks,对Rhino Mocks的特定影响是它破坏了对F#,C ++和Spec#的支持,具有71个验证和119个评级(平均4.9)。 ,这对于Connect错误非常重要http://www.ayende.com/Blog/archive/2008/08/13/How-.Net-3.5-SP1-broke-Rhino-Mocks.aspx是讨论该问题的博客许多社区意见的问题这可能是许多验证的来源。 在3.5 SP1中,作为支持ASLR所做更改的副作用,我们删除了空检查。 结果,我们过去处理的一个失败案例导致运行时中出现一个AV,表现为ExecutionEngineException和进程终止 |
MSConnect |
序列化挂起或抛出OutOfMemoryException |
CLR |
Rhino Mocks网站上也提到了此问题,该网站报告了3.5SP1的另一个重大更改。 目前尚不清楚此问题是否也破坏了Rhino Mocks测试软件。 由于类型系统的变化,具有以下标准的类型:用引用类型实例化的泛型类型实现ISerializable包含静态字段。 |
MSConnect |
.NET Framework 2.0 SP2中Oracle事务中的AutoCommit行为更改 |
DPR |
现有的依赖事务行为才能正常工作的应用程序将中断,从而导致数据损坏。 |
MSConnect |
EntityDataSource运行时:无法以1:0..1的关系显示动态数据的FK ID |
DPR |
这会破坏使用ASP.NET动态数据创建的网站/应用程序,因为动态数据假定存在属性描述符,并使用它们来获取其链接的标签。 唯一已知的解决方法是手动编辑Dynamic Data的模板(每个站点/应用程序均具有私有副本)以捕获异常。 通常具有以下形式的异常:[HttpException(0x80004005):DataBinding:'System.Web.UI.WebControls.EntityDataSourceWrapper'不包含名称为'Manager'的属性。 |
第三届论坛 |
SaveChanges不支持将实体插入和绑定作为单个操作 |
DPR |
如果资源参与关系(例如1:1),则在插入资源的新实例时,我们也需要发送链接,因为该链接在数据库级别是必需的。 客户端在插入此类资源时不发送链接 |
第三届论坛 |
DataServiceContext:具有链接的实体上的DeleteObject失败 |
DPR |
这会影响具有参考属性的任何资源的删除。 引用属性的链接绝不能处于“已添加”或“已删除”状态。 取而代之的是,在删除/非空的情况下,应始终将引用目标修改为null,在添加/更新的情况下,应将其修改为null。 |
第三届论坛 |
.NET 3.5 SP1中断了IIS下WPF的使用 |
WPF |
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361469 | MSConnect |
XPS文档中的相对超链接断开,导致应用崩溃 |
WPF |
固定。 |
MSConnect |
回归:Geometry.Combine在3.5 sp1中创建的点/段比以前更多 |
WPF |
具有几何图形(绘制形状)的场景中的性能回归。 |
其他 |
Related Posts
相关文章
Hidden Gems - Not the same old 3.5 SP1 post
隐藏的宝石-与旧的3.5 SP1帖子不同