Problemy podczas migracji programu .NET Framework 4

W tym artykule opisano problemy z migracją między programem .NET Framework w wersji 3.5 z dodatkiem Service Pack 1 i .NET Framework w wersji 4, w tym poprawkami, zmianami dotyczącymi zgodności standardów i zabezpieczeń oraz zmianami w oparciu o opinie klientów. Większość tych zmian nie wymaga żadnych modyfikacji programistycznych w aplikacjach. W przypadku tych, które mogą obejmować modyfikacje, zobacz kolumnę Zalecane zmiany w tabeli. Istotne zmiany są podzielone według obszaru, na przykład ASP.NET i Windows Presentation Foundation (WPF).

Aby zapoznać się z wyższym poziomem przeglądu problemów w tym artykule, zobacz Przewodnik migracji do programu .NET Framework 4.

Aby uzyskać informacje o nowych funkcjach, zobacz Co nowego w programie .NET Framework 4.

ASP.NET i Internet

Przestrzenie nazw: System.Web, System.Web.Mobile, , System.Web.SecuritySystem.Web.UI.WebControls

Zestaw: System.Web (w System.Web.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Pliki definicji przeglądarki Pliki definicji przeglądarki zostały zaktualizowane w celu uwzględnienia informacji o nowych i zaktualizowanych przeglądarkach i urządzeniach. Starsze przeglądarki i urządzenia, takie jak Netscape Navigator, zostały usunięte, a nowsze przeglądarki i urządzenia, takie jak Google Chrome i Apple i Telefon zostały dodane.

Jeśli aplikacja zawiera niestandardowe definicje przeglądarki dziedziczone z jednej z definicji przeglądarki, które zostały usunięte, zostanie wyświetlony błąd.

HttpBrowserCapabilities Obiekt (uwidoczniony przez właściwość stronyRequest.Browse) jest napędzany przez pliki definicji przeglądarki. W związku z tym informacje zwracane przez uzyskanie dostępu do właściwości tego obiektu w ASP.NET 4 mogą być inne niż informacje zwrócone we wcześniejszej wersji ASP.NET.
Jeśli aplikacja korzysta ze starych plików definicji przeglądarki, możesz skopiować je z następującego folderu:

Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers

Skopiuj pliki do odpowiedniego folderu \CONFIG\Browsers dla ASP.NET 4. Po skopiowaniu plików uruchom narzędzie wiersza polecenia Aspnet_regbrowsers.exe . Aby uzyskać więcej informacji, zobacz witrynę https://www.asp.net/mobile sieci Web.
Aplikacje podrzędne działające w mieszanych wersjach ASP.NET ASP.NET 4 aplikacje skonfigurowane jako elementy podrzędne aplikacji z wcześniejszymi wersjami ASP.NET mogą nie uruchomić się z powodu błędów konfiguracji lub kompilacji. Określony błąd, który występuje, zależy od tego, czy aplikacja działa w usługach IIS 6.0, czy w usługach IIS 7 lub IIS 7.5. Możesz wprowadzić zmiany w plikach konfiguracji aplikacji, których dotyczy problem, aby system konfiguracji prawidłowo rozpoznał aplikację ASP.NET 4. Aby uzyskać informacje o zmianach, które należy wprowadzić, zobacz sekcję "nie można uruchomić aplikacji podrzędnych ASP.NET 4 w obszarze ASP.NET 2.0 lub aplikacji ASP.NET 3.5" w dokumencie ASP.NET 4 istotne zmiany w witrynie sieci Web ASP.NET.
Zmiany identyfikatora klienta Nowe clientIDMode ustawienie w ASP.NET 4 umożliwia określenie, jak ASP.NET generuje id atrybut dla elementów HTML. W poprzednich wersjach ASP.NET domyślne zachowanie było równoważne AutoID ustawieniu clientIDMode. Ustawieniem domyślnym jest teraz Predictable. Aby uzyskać więcej informacji, zobacz ASP.NET identyfikacja kontroli serwera sieci Web. Jeśli używasz programu Visual Studio do uaktualniania aplikacji z wersji ASP.NET 2.0 lub ASP.NET 3.5, narzędzie automatycznie dodaje ustawienie do pliku Web.config, które zachowuje zachowanie wcześniejszych wersji programu .NET Framework. Jeśli jednak uaktualnisz aplikację, zmieniając pulę aplikacji w usługach IIS na docelową platformę .NET Framework 4, ASP.NET domyślnie używa nowego trybu. Aby wyłączyć nowy tryb identyfikatora klienta, dodaj następujące ustawienie do pliku Web.config:

<pages clientIDMode="AutoID" />
Zabezpieczenia dostępu kodu (CAS) funkcje platformy ASP.NET 2.0 NET, które zostały dodane w ASP.NET 3.5, korzystają z platform .NET Framework 1.1 i .NET Framework 2.0 w modelu zabezpieczeń dostępu kodu (CAS). Jednak wdrożenie cas w ASP.NET 4 zostało znacząco przebudowane. W związku z tym aplikacje ASP.NET częściowo zaufania, które opierają się na zaufanym kodzie uruchomionym w globalnej pamięci podręcznej zestawów, mogą zakończyć się niepowodzeniem z różnymi wyjątkami zabezpieczeń. Aplikacje częściowo zaufane, które opierają się na obszernych modyfikacjach zasad CAS maszyny, mogą również zakończyć się niepowodzeniem i zgłaszać wyjątki zabezpieczeń. Można przywrócić częściowe zaufanie ASP.NET 4 aplikacje do zachowania ASP.NET 1.1 i 2.0 przy użyciu nowego legacyCasModel atrybutu trust w elemenie konfiguracji, jak pokazano w poniższym przykładzie:

<trust level= "Medium" legacyCasModel="true" />

Ważne: Przywrócenie starszego modelu CAS może oznaczać zmniejszenie bezpieczeństwa.

Aby uzyskać więcej informacji na temat nowego modelu zabezpieczeń dostępu do kodu ASP.NET 4, zobacz Zabezpieczenia dostępu kodu w aplikacjach ASP.NET 4.
Pliki konfiguracji Pliki konfiguracji głównej (plik machine.config i główny plik Web.config) dla programu .NET Framework i ASP.NET 4 zostały zaktualizowane tak, aby zawierały większość informacji o konfiguracji standardowych znalezionych w plikach Web.config aplikacji w ASP.NET 3.5. Ze względu na złożoność zarządzanych systemów konfiguracji usług IIS 7 i IIS 7.5 uruchamianie aplikacji ASP.NET 3.5 w ASP.NET 4 oraz w usługach IIS 7 i IIS 7.5 może spowodować błędy ASP.NET lub błędy usług IIS. Uaktualnij aplikacje ASP.NET 3.5, aby ASP.NET 4 przy użyciu narzędzi uaktualniania projektu w programie Visual Studio. Program Visual Studio 2010 automatycznie modyfikuje plik Web.config aplikacji ASP.NET 3.5, aby zawierał odpowiednie ustawienia dla ASP.NET 4.

Można jednak uruchamiać aplikacje ASP.NET 3.5 przy użyciu programu .NET Framework 4 bez ponownej kompilacji. W takim przypadku może być konieczne ręczne zmodyfikowanie pliku Web.config aplikacji przed uruchomieniem aplikacji w programie .NET Framework 4 i w usługach IIS 7 lub IIS 7.5. Określona zmiana, którą należy wprowadzić, zależy od kombinacji oprogramowania, z którym pracujesz, w tym wersji dodatku Service Pack (SP). Aby uzyskać informacje na temat możliwych kombinacji oprogramowania, które mają wpływ na tę zmianę i sposobu rozwiązywania problemów z określonymi kombinacjami, zobacz sekcję "Błędy konfiguracji związane z nową konfiguracją katalogu głównego ASP.NET 4" w dokumencie ASP.NET 4 Istotne zmiany w witrynie sieci Web ASP.NET.
Renderowanie kontrolek W poprzednich wersjach ASP.NET niektóre kontrolki emitowane znaczniki, których nie można wyłączyć. Domyślnie ten typ znaczników nie jest już generowany w ASP.NET 4. Zmiany renderowania mają wpływ na następujące kontrolki:

* Kontrolki Image i ImageButton nie renderuje już atrybutu border="0" .
* Kontrolki BaseValidator klasy i walidacji, które pochodzą z niej, nie są już domyślnie renderowane czerwonego tekstu.
* Kontrolka HtmlForm nie renderuje atrybutu name .
* Kontrolka Table nie renderuje już atrybutu border="0" .

Kontrolki, które nie są przeznaczone dla danych wejściowych użytkownika (na przykład kontrolki Label ), nie renderują już atrybutu disabled="disabled" , jeśli właściwość Enabled jest ustawiona false na (lub jeśli dziedziczą to ustawienie z kontrolki kontenera).
Jeśli używasz programu Visual Studio do uaktualniania aplikacji z ASP.NET 2.0 lub ASP.NET 3.5, narzędzie automatycznie dodaje ustawienie do pliku Web.config, który zachowuje starsze renderowanie. Jeśli jednak uaktualnisz aplikację, zmieniając pulę aplikacji w usługach IIS na docelową platformę .NET Framework 4, ASP.NET domyślnie używa nowego trybu renderowania. Aby wyłączyć nowy tryb renderowania, dodaj następujące ustawienie do pliku Web.config:

<pages controlRenderingCompatibilityVersion="3.5" />
Programy obsługi zdarzeń w dokumentach domyślnych ASP.NET 4 renderuje wartość atrybutu elementu action HTML form jako pusty ciąg po wysłaniu żądania do bez rozszerzenia adresu URL, który ma do niego domyślny dokument. We wcześniejszych wersjach ASP.NET żądanie http://contoso.com spowodowałoby żądanie Default.aspx. W tym dokumencie tag otwierający form będzie renderowany tak jak w poniższym przykładzie:

<form action="Default.aspx" />

W ASP.NET 4 żądanie http://contoso.com powoduje również żądanie Default.aspx, ale ASP.NET teraz renderuje tag otwierający form HTML, jak w poniższym przykładzie:

<form action="" />

action Gdy atrybut jest pustym ciągiem, obiekt usług IIS DefaultDocumentModule tworzy żądanie podrzędne do Default.aspx. W większości warunków to żądanie podrzędne jest niewidoczne dla kodu aplikacji, a strona Default.aspx działa normalnie. Jednak potencjalna interakcja między kodem zarządzanym a usługami IIS 7 lub IIS 7.5 Zintegrowanym trybem może spowodować, że zarządzane strony .aspx przestaną działać prawidłowo podczas żądania podrzędnego. Jeśli wystąpią następujące warunki, podrzędne żądanie do domyślnego dokumentu .aspx spowoduje błąd lub nieoczekiwane zachowanie:

* Strona .aspx jest wysyłana do przeglądarki z atrybutem form elementu action ustawionym na "".
* Formularz jest publikowany z powrotem do ASP.NET.
* Zarządzany moduł HTTP odczytuje część treści jednostki, na przykład Request.Form lub Request.Params. Powoduje to odczytanie treści jednostki żądania POST do pamięci zarządzanej. W związku z tym treść jednostki nie jest już dostępna dla żadnych modułów kodu natywnego, które są uruchomione w trybie zintegrowanym usług IIS 7 lub IIS 7.5.
* Obiekt usług IIS DefaultDocumentModule zostanie ostatecznie uruchomiony i utworzy żądanie podrzędne do dokumentu Default.aspx. Jednak ponieważ treść jednostki została już odczytowana przez fragment kodu zarządzanego, nie ma dostępnej treści jednostki do wysłania do żądania podrzędnego.
* Po uruchomieniu potoku HTTP dla żądania podrzędnego program obsługi dla plików .aspx jest uruchamiany w fazie wykonywania programu obsługi.

Ponieważ nie ma treści jednostki, nie ma zmiennych formularza i nie ma stanu widoku. W związku z tym program obsługi strony .aspx nie ma dostępnych informacji, aby określić, jakie zdarzenie (jeśli istnieje) powinno zostać zgłoszone. W związku z tym żaden z procedur obsługi zdarzeń po awarii dla uruchomionego .aspx strony, którego dotyczy problem.
Aby uzyskać informacje na temat sposobów obejścia problemów, które mogą wystąpić w wyniku tej zmiany, zobacz "Programy obsługi zdarzeń mogą nie być zgłaszane w dokumencie domyślnym w usługach IIS 7 lub IIS 7.5 w trybie zintegrowanym" w dokumencie ASP.NET 4 istotne zmiany w witrynie sieci Web ASP.NET.
Algorytm tworzenia skrótów ASP.NET używa zarówno algorytmów szyfrowania, jak i tworzenia skrótów w celu zabezpieczenia danych, takich jak pliki cookie uwierzytelniania formularzy i stan wyświetlania. Domyślnie ASP.NET 4 używa algorytmu HMACSHA256 dla operacji skrótów na plikach cookie i stanu wyświetlania. Starsze wersje ASP.NET używały starszego HMACSHA1 algorytmu. Jeśli uruchamiasz aplikacje, które mieszają ASP.NET 2.0 i ASP.NET 4, w których dane takie jak pliki cookie uwierzytelniania formularzy muszą działać w wersjach programu .NET Framework, skonfiguruj aplikację internetową ASP.NET 4 do używania starszego HMACSHA1 algorytmu, dodając następujące ustawienie w pliku Web.config:

<machineKey validation="SHA1" />
Kontrolki hostingu w programie Internet Explorer Nie można już hostować kontrolek Windows Forms w programie Internet Explorer, ponieważ istnieją lepsze rozwiązania do hostowania kontrolek w sieci Web. W związku z tym zestawy IEHost.dll i IEExec.exe zostały usunięte z programu .NET Framework. Do tworzenia niestandardowych kontrolek w aplikacjach internetowych można użyć następujących technologii:

* Możesz utworzyć aplikację Silverlight i skonfigurować ją tak, aby była uruchamiana poza przeglądarką. Aby uzyskać więcej informacji, zobacz Out-of-Browser Support (Obsługa braku przeglądarki).
* Możesz utworzyć aplikację przeglądarki XAML (XBAP), aby korzystać z funkcji WPF (wymaga programu .NET Framework na maszynach klienckich). Aby uzyskać więcej informacji, zobacz WPF XAML Browser Applications Overview (Omówienie aplikacji przeglądarki WPF XAML).
Metody HtmlEncode i UrlEncode Metody HtmlEncodeHttpUtilityHttpServerUtility i UrlEncode klas zostały zaktualizowane w celu zakodowania znaku pojedynczego cudzysłowu (') w następujący sposób:

* Metoda HtmlEncode koduje wystąpienia pojedynczego cudzysłowu jako &#39;
* Metoda UrlEncode koduje wystąpienia pojedynczego cudzysłowu jako %27
Sprawdź kod pod kątem miejsc, w których używasz HtmlEncode metod i UrlEncode , i upewnij się, że zmiana kodowania nie spowoduje zmiany, która wpłynie na aplikację.
Błędy httpException w aplikacjach ASP.NET 2.0 Po włączeniu ASP.NET 4 w usługach IIS 6 ASP.NET 2.0 aplikacje działające w usługach IIS 6 (w systemie Windows Server 2003 lub Windows Server 2003 R2) mogą generować błędy, takie jak: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. * Jeśli ASP.NET 4 nie jest wymagane do uruchomienia witryny sieci Web, zamapuj ponownie witrynę, aby zamiast tego użyć ASP.NET 2.0.

— lub —

* Jeśli ASP.NET 4 jest wymagana w celu uruchomienia witryny sieci Web, przenieś wszystkie katalogi wirtualne ASP.NET 2.0 do innej witryny sieci Web mapowanej na ASP.NET 2.0.

— lub —

* Wyłącz adresy URL bez rozszerzenia. Aby uzyskać więcej informacji, zobacz "aplikacje ASP.NET 2.0 mogą generować błędy HttpException odwołujące się do eurl.axd" w dokumencie ASP.NET 4 istotne zmiany w witrynie sieci Web ASP.NET.
Typy członkostwa Niektóre typy (na przykład MembershipProvider) używane w członkostwie ASP.NET zostały przeniesione z System.Web.dll do zestawu System.Web.ApplicationServices.dll. Typy zostały przeniesione w celu rozwiązania zależności warstw architektury między typami w kliencie i rozszerzonymi jednostkami SKU programu .NET Framework. Biblioteki klas uaktualnione z wcześniejszych wersji ASP.NET i korzystające z przeniesionych typów członkostwa mogą zakończyć się niepowodzeniem podczas kompilowania w przypadku użycia w projekcie ASP.NET 4. Jeśli tak, dodaj odwołanie w projekcie biblioteki klas, aby System.Web.ApplicationServices.dll.
Zmiany kontrolki menu Zmiany w kontrolce Menu powodują następujące zachowanie:

* Jeśli MenuRenderingMode jest ustawiona Listwartość , lub jeśli MenuRenderingMode jest ustawiona na Default wartość i ControlRenderingCompatibilityVersion jest ustawiona na 4.0 lub nowszą PopOutImageUrl , właściwość nie ma żadnego wpływu.
* Jeśli ścieżka ustawiona we właściwościach StaticPopOutImageUrl i DynamicPopOutImageUrl zawiera ukośnik odwrotny (\), obrazy nie są renderowane. (We wcześniejszych wersjach ASP.NET ścieżka może zawierać ukośnik odwrotny).
* Zamiast ustawiać PopOutImageUrl właściwość dla poszczególnych elementów menu, ustaw StaticPopOutImageUrl lub DynamicPopOutImageUrl kontrolki nadrzędnej Menu .

— lub —

Ustaw MenuRenderingMode wartość Tablena , lub ustaw DefaultMenuRenderingMode wartość na i ustaw wartość ControlRenderingCompatibilityVersion3.5. Te ustawienia powodują, że kontrolka Menu używa układu opartego na tabeli HTML używanego we wcześniejszych wersjach ASP.NET.
* Jeśli ścieżka we StaticPopOutImageUrl właściwości or DynamicPopOutImageUrl zawiera ukośnik odwrotny (\), zastąp znak ukośnika (/).
Zestaw mobilny w pliku Web.config W poprzednich wersjach ASP.NET odwołanie do zestawu System.Web.Mobile.dll zostało uwzględnione w głównym pliku Web.config w sekcji w assemblies sekcji system.web/compilation. Aby zwiększyć wydajność, odwołanie do tego zestawu zostało usunięte.

Uwaga: zestaw System.Web.Mobile.dll i kontrolki ASP.NET dla urządzeń przenośnych znajdują się w ASP.NET 4, ale są przestarzałe.
Jeśli chcesz użyć typów z tego zestawu, dodaj odwołanie do zestawu w głównym pliku Web.config lub w pliku web.config aplikacji.
Buforowanie danych wyjściowych W ASP.NET 1.0 usterka spowodowała buforowane strony określone Location="ServerAndClient" jako wyjściowe €"ustawienie pamięci podręcznej emitujące Vary:* nagłówek HTTP w odpowiedzi. Miało to wpływ na informowanie przeglądarek klienckich, aby nigdy nie buforowały strony lokalnie. W ASP.NET 1.1 SetOmitVaryStar dodano metodę , którą można wywołać, aby pominąć Vary:* nagłówek. Jednak raporty o błędach sugerują, że deweloperzy nie wiedzą o istniejącym SetOmitVaryStar zachowaniu.

W ASP.NET 4 Vary:* nagłówek HTTP nie jest już emitowany z odpowiedzi określających następującą dyrektywę:

<%@ OutputCache Location="ServerAndClient" %>

W związku SetOmitVaryStar z tym metoda nie jest już potrzebna, aby pominąć Vary:* nagłówek. W aplikacjach określających atrybut "ServerAndClient" Location strony będą buforowane w przeglądarce bez konieczności wywoływania metody SetOmitVaryStar.
Jeśli strony w aplikacji muszą emitować Vary:*metodę , wywołaj metodę AppendHeader , jak pokazano w poniższym przykładzie:

System.Web.HttpResponse.AppendHeader("Vary","*");

Alternatywnie można zmienić wartość atrybutu buforowania Location danych wyjściowych na "Serwer".
Analizowanie stron Analizator stron dla ASP.NET stron sieci Web (plików .aspx) i kontrolek użytkownika (pliki ascx) jest bardziej rygorystyczny w ASP.NET 4 niż we wcześniejszych wersjach ASP.NET i flaguje więcej znaczników jako nieprawidłowe niż we wcześniejszych wersjach. Sprawdź komunikaty o błędach generowane podczas uruchamiania strony i naprawiaj błędy wynikające z nieprawidłowego narzutu.
Typy paszportów Obsługa usługi Passport wbudowana w ASP.NET 2.0 jest przestarzała i nie jest obsługiwana z powodu zmian w usłudze Passport (teraz zestaw LIVE ID SDK). W związku z tym typy powiązane z usługą Passport w programie System.Web.Security są teraz oznaczone atrybutem ObsoleteAttribute . Zmień dowolny kod, który używa typów usługi Passport w System.Web.Security przestrzeni nazw (na przykład PassportIdentity), aby użyć zestawu SDK usługi Windows Live ID.
Informacje pathInfo we właściwości FilePath ASP.NET 4 nie zawiera PathInfo już wartości w zwracanych wartościach z właściwości, takich jak FilePath, AppRelativeCurrentExecutionFilePathi CurrentExecutionFilePath. PathInfo Zamiast tego informacje są dostępne w pliku PathInfo. Załóżmy na przykład następujący fragment adresu URL:

/testapp/Action.mvc/SomeAction

We wcześniejszych wersjach ASP.NET HttpRequest właściwości mają następujące wartości:

* FilePath: /testapp/Action.mvc/SomeAction
* PathInfo: (pusty)

W ASP.NET 4 HttpRequest właściwości mają następujące wartości:

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
Sprawdź kod dla miejsc, w których polegasz na właściwościach HttpRequest klasy, aby zwrócić informacje o ścieżce. Zmień kod, aby odzwierciedlał zmiany sposobu zwracania informacji o ścieżce.
Sprawdzanie poprawności żądania Aby poprawić walidację żądania, ASP.NET jest wywoływana wcześniej w cyklu życia żądania. W związku z tym walidacja żądań jest uruchamiana dla żądań, które nie są przeznaczone dla plików .aspx, takich jak wywołania usługi sieci Web i dla niestandardowych procedur obsługi. Walidacja żądania będzie również aktywna, gdy niestandardowe moduły HTTP są uruchomione w potoku przetwarzania żądań.

W wyniku tej zmiany żądania dotyczące zasobów innych niż pliki .aspx mogą zgłaszać błędy weryfikacji żądania. Niestandardowy kod uruchamiany w potoku żądania (na przykład niestandardowe moduły HTTP) może również zgłaszać błędy weryfikacji żądania.
W razie potrzeby można przywrócić stare zachowanie tylko .aspx stron wyzwalających weryfikację żądania przy użyciu następującego ustawienia w pliku konfiguracji sieci Web:

<httpRuntime requestValidationMode="2.0" />

Ostrzeżenie: Jeśli powrócisz do starego zachowania, upewnij się, że cały kod w istniejących programach obsługi, modułach i innym kodzie niestandardowym wykonuje kontrole potencjalnie niebezpiecznych danych wejściowych HTTP, które mogą być wektorami ataków XSS.
Routing Jeśli tworzysz witrynę sieci Web systemu plików w programie Visual Studio 2010, a witryna sieci Web znajduje się w folderze zawierającym kropkę (.) w nazwie folderu, routing adresów URL nie będzie działać niezawodnie. Błąd HTTP 404 jest zwracany z niektórych ścieżek wirtualnych. Dzieje się tak, ponieważ program Visual Studio 2010 uruchamia program Visual Studio Development Server przy użyciu nieprawidłowej ścieżki katalogu głównego katalogu wirtualnego. * Na stronie Właściwości witryny sieci Web opartej na pliku zmień atrybut Ścieżka wirtualna na "/".

— lub —

* Utwórz projekt aplikacji internetowej zamiast projektu witryny sieci Web. Projekty aplikacji internetowych nie mają tego problemu, a routing adresów URL działa nawet wtedy, gdy folder projektu ma kropkę w nazwie.

— lub —

* Utwórz witrynę sieci Web opartą na protokole HTTP hostowaną w usługach IIS. Witryny sieci Web hostowane przez usługi IIS mogą mieć kropki w ścieżce wirtualnej, a także w folderze pliku projektu.
Witryny programu SharePoint Jeśli spróbujesz uruchomić witrynę sieci Web ASP.NET 4 wdrożona jako element podrzędny witryny sieci Web programu SharePoint, która zawiera niestandardowy poziom częściowego zaufania o nazwie WSS_Minimal, zostanie wyświetlony następujący błąd:

Could not find permission set named 'ASP.Net'.
Obecnie żadne wersje programu SharePoint nie są zgodne z ASP.NET. W związku z tym nie należy próbować uruchomić witryny sieci Web ASP.NET 4 jako elementu podrzędnego witryny sieci Web programu SharePoint.
Standardy XHTML 1.1 Aby włączyć zgodność XHTML 1.1 dla nowych witryn sieci Web, kontrolki ASP.NET w programie .NET Framework 4 wygenerują zgodny kod HTML XHTML 1.1. To renderowanie jest włączone przy użyciu następującej opcji w pliku Web.config wewnątrz <system.Web> elementu:

<pages controlRenderingCompatibilityVersion="4.0"/>

Ta opcja jest domyślnie ustawiona na 4.0. Projekty internetowe uaktualnione z programu Visual Studio 2008 mają włączone ustawienie 3.5 pod kątem zgodności.
Brak.

Podstawowe funkcje

Funkcje ogólne

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Cardspace Usługa Windows CardSpace nie jest już uwzględniona w programie .NET Framework; jest dostarczany oddzielnie. Pobierz aplikację Windows CardSpace z Centrum pobierania Microsoft.
Pliki konfiguracji Wprowadzono poprawki w sposobie uzyskiwania dostępu do plików konfiguracji aplikacji przez program .NET Framework. Jeśli plik konfiguracji aplikacji ma nazwę application-name.config, zmień jego nazwę na application-name.exe.config. Na przykład zmień nazwę myApp.config na MyApp.exe.config.
Kompilator kodu języka C# CompilerKlasy , CompilerErroriErrorLevel, które znajdowały się w Microsoft.CSharp przestrzeni nazw, nie są już dostępne, a ich zestaw (cscompmgd.dll) nie jest już uwzględniony w programie .NET Framework. CodeDomProvider Użyj klasy i innych klas w System.CodeDom.Compiler przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Using the CodeDOM (Korzystanie z funkcji CodeDOM).
Hosting (niezarządzany interfejs API) Aby zwiększyć możliwości hostingu, niektóre interfejsy API aktywacji hostingu zostały wycofane. Funkcje wykonywania równoległego w procesie umożliwiają aplikacji ładowanie i uruchamianie wielu wersji programu .NET Framework w tym samym procesie. Można na przykład uruchamiać aplikacje ładujące dodatki (lub składniki) oparte na programie .NET Framework 2.0 SP1 i dodatki oparte na programie .NET Framework 4 w tym samym procesie. Starsze składniki nadal korzystają ze starszej wersji programu .NET Framework, a nowe składniki używają nowej wersji programu .NET Framework. Użyj konfiguracji opisanych w temacie Wykonywanie równoległe w procesie.
Nowy model zabezpieczeń Zasady zabezpieczeń dostępu kodu (CAS) zostały wyłączone i zastąpione uproszczonym modelem, zgodnie z opisem w temacie Zmiany zabezpieczeń w programie .NET Framework 4. Modyfikacje mogą być wymagane, jeśli zależysz od serwera CAS w aplikacjach. Aby uzyskać więcej informacji, zobacz Code Access Security Policy Compatibility and Migration (Zgodność i migracja zasad zabezpieczeń dostępu do kodu).

Data i godzina

Przestrzeń nazw: System

Zestaw: mscorlib (w mscorlib.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Czasu letniego Aby zachować spójność z zegarem systemowym, właściwości czasu (takie jak Local i Now) używają teraz reguł systemu operacyjnego zamiast innych danych programu .NET Framework na potrzeby operacji czasu letniego. Brak.
Formatowanie ciągów Aby obsługiwać formatowanie wrażliwe na kulturę, TimeSpan struktura zawiera nowe przeciążenia ToStringmetod , Parsei TryParse oprócz nowych ParseExact metod i TryParseExact . Brak.

Globalizacja

Aby uzyskać listę nowych kultur neutralnych i specyficznych, zobacz Co nowego w globalizacji i lokalizacji.

Przestrzeń nazw: System.Globalization

Zestaw: mscorlib (w mscorlib.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Nazwy kultur Następujące zmiany nazw dotyczą kultur niemieckich, Divehi i Afrykańskich:

* CurrencyEnglishName: Nazwa waluty dla kultury niemieckiej (Szwajcaria) (de-CH) zmieniła się z "sFr".
* LongDatePattern: Wzorzec daty długiej dla kultury Divehi (Malediwy) (dv-MV) zmienił się z "dd/MMMM/rrrr" na "dd/MM/rrrr".
* PMDesignator: Projektant Afrikaans (Republika Południowej Afryki) (af-ZA) zmienił się z "nm" na "PM".
Zanotuj zmiany nazwy kultury.
Parametr LCID Aby zachować spójność z oczekiwanym zachowaniem w ustawieniach serwera automatyzacji, clR nie przekazuje już bieżącej kultury parametru LCID do niezarządzanych aplikacji opartych na modelu COM. Zamiast tego przekazuje 1033 (en-us) dla kultury. Nie trzeba modyfikować z wyjątkiem aplikacji natywnych, które wymagają określonej kultury.
Przestarzałe typy kultury Typy CultureTypes kultury i CultureTypes są teraz przestarzałe.

W przypadku zgodności z poprzednimi CultureTypes wersjami funkcja zwraca teraz neutralne i określone kultury, które zostały dołączone do poprzedniego programu .NET Framework, a CultureTypes teraz zwraca pustą listę.
Użyj innych wartości CultureTypes wyliczenia.
Pobieranie kultury Począwszy od systemu Windows 7, program .NET Framework 4 pobiera informacje o kulturze z systemu operacyjnego zamiast przechowywać same dane. Ponadto program .NET Framework synchronizuje się z systemem Windows w celu sortowania i wielkości danych. Brak.
Standardy Unicode 5.1 Program .NET Framework obsługuje teraz wszystkie znaki Unicode 5.1 — dodanie około 1400 znaków. Dodatkowe znaki obejmują nowe symbole, strzałki, znaki diakrytyczne, znaki interpunkcyjne, symbole matematyczne, pociągnięcia CJK i ideografy, dodatkowe znaki malajalamowe i numeryczne Telugu oraz różne znaki mjanmy, łacińskie, arabskie, greckie, mongolskie i cyrylica. Następujące nowe skrypty są obsługiwane w standardach Unicode 5.1: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu i Malayalam oraz Cham. Brak.

Wyjątki

Przestrzenie nazw: System, System.Runtime.ExceptionServices

Zestaw: mscorlib (w mscorlib.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Wyjątki dotyczące uszkodzonego stanu procesu ClR nie dostarcza już wyjątków dla uszkodzonego stanu procesu do procedur obsługi wyjątków w kodzie zarządzanym. Te wyjątki wskazują, że stan procesu został uszkodzony. Nie zalecamy uruchamiania aplikacji w tym stanie.

Aby uzyskać więcej informacji, zobacz HandleProcessCorruptedStateExceptionsAttribute i wpis Obsługa uszkodzonych wyjątków stanu w magazynie MSDN.
Wyjątki aparatu wykonywania ExecutionEngineException jest teraz przestarzały, ponieważ przechwytowalny wyjątek pozwoli na kontynuowanie działania niestabilnego procesu. Ta zmiana zwiększa przewidywalność i niezawodność w środowisku uruchomieniowym. Użyj elementu , InvalidOperationException aby zasygnalizować warunek.

Odbicie

Przestrzeń nazw: System.Reflection

Zestaw: mscorlib (w mscorlib.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Algorytmy skrótów zestawów Właściwość HashAlgorithm zwraca teraz wartość AssemblyHashAlgorithm, ponieważ środowisko uruchomieniowe nie zna algorytmu wyznaczania wartości skrótu przywoływanego zestawu, gdy zestaw nie jest załadowany. (Odnosi się to do używania właściwości w przywoływanego zestawu, takiego jak zwrócone przez metodę GetReferencedAssemblies ). Brak.
Ładowanie zestawu Aby zapobiec nadmiarowemu ładowaniu zestawów i zapisywaniu wirtualnej przestrzeni adresowej, clR ładuje teraz zestawy przy użyciu tylko funkcji Win32 MapViewOfFile . Nie wywołuje LoadLibrary już funkcji.

Ta zmiana wpływa na aplikacje diagnostyczne w następujący sposób:

* Element ProcessModuleCollection nie będzie już zawierać żadnych modułów z biblioteki klas (.dll pliku) uzyskanego z wywołania metody .Process.GetCurrentProcess().Modules
* Aplikacje Win32 korzystające z EnumProcessModules funkcji nie będą widzieć wszystkich zarządzanych modułów na liście.
Brak.
Typ deklarowania Właściwość DeclaringType teraz poprawnie zwraca wartość null, gdy typ nie ma typu deklaratywnego. Brak.
Delegaci Delegat zgłasza ArgumentNullException teraz wartość zamiast NullReferenceException , gdy wartość null jest przekazywana do konstruktora delegata. Upewnij się, że każda obsługa wyjątków przechwytuje ArgumentNullExceptionwartość .
Zmiana globalnej lokalizacji pamięci podręcznej zestawów W przypadku zestawów programu .NET Framework 4 globalna pamięć podręczna zestawów została przeniesiona z katalogu systemu Windows (%WINDIR%) do podkatalogu Microsoft.Net (%WINDIR%\Microsoft.Net). Zestawy z wcześniejszych wersji pozostają w starszym katalogu.

Niezarządzane wyliczenie ASM_CACHE_FLAGS zawiera nową ASM_CACHE_ROOT_EX flagę. Ta flaga pobiera lokalizację pamięci podręcznej dla zestawów programu .NET Framework 4, które można uzyskać za pomocą funkcji GetCachePath .
Brak, zakładając, że aplikacje nie używają jawnych ścieżek do zestawów, co nie jest zalecaną praktyką.
Globalne narzędzie pamięci podręcznej zestawów Narzędzie Gacutil.exe (globalna pamięć podręczna zestawów) nie obsługuje już przeglądarki wtyczek powłoki. Brak.

Współdziałanie

Przestrzeń nazw: System.Runtime.InteropServices

Zestaw: mscorlib (w mscorlib.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Długość buforu (niezarządzany interfejs API) Aby zapisać pamięć, funkcja parametru pBufferLengthOffsetICorProfilerInfo2::GetStringLayout została zmieniona tak, aby była zgodna z parametrem pStringLengthOffset . Oba parametry wskazują teraz lokalizację przesunięcia długości ciągu. Długość buforu została usunięta z reprezentacji klasy ciągów. Usuń dowolną zależność od długości buforu.
Debugowanie trybu JIT Aby uprościć rejestrację debugowania just in time (JIT), debuger programu .NET Framework używa teraz tylko klucza rejestru AeDebug, który steruje zachowaniem debugowania JIT dla kodu natywnego. Ta zmiana powoduje następujące kwestie:

* Nie można już zarejestrować dwóch różnych debugerów dla kodu zarządzanego i natywnego.
* Nie można już automatycznie uruchomić debugera dla nieinterakcyjnego procesu, ale możesz monitować użytkownika o proces interaktywny.
* Nie otrzymasz powiadomienia, gdy nie można uruchomić debugera lub gdy nie ma zarejestrowanego debugera, który powinien zostać uruchomiony.
* Zasady automatycznego uruchamiania, które zależą od interakcyjności aplikacji, nie są już obsługiwane.
Dostosuj operacje debugowania zgodnie z potrzebami.
Wywołanie platformy Aby zwiększyć wydajność współdziałania z kodem niezarządzanym, nieprawidłowe konwencje wywoływania na platformie powodują teraz niepowodzenie aplikacji. W poprzednich wersjach warstwa marshalling rozwiązała te błędy w górę stosu. Debugowanie aplikacji w programie Microsoft Visual Studio ostrzega o tych błędach, aby można je było poprawić.

Jeśli nie można zaktualizować plików binarnych, możesz uwzględnić <element NetFx40_PInvokeStackResilience> w pliku konfiguracji aplikacji, aby umożliwić rozwiązywanie problemów z wywołaniem w górę stosu, jak we wcześniejszych wersjach. Może to jednak mieć wpływ na wydajność aplikacji.
Usunięte interfejsy (niezarządzany interfejs API) Aby uniknąć nieporozumień dla deweloperów, następujące interfejsy zostały usunięte, ponieważ nie dostarczyły żadnych przydatnych scenariuszy czasu wykonywania, a CLR nie dostarczyła ani nie zaakceptowała żadnych implementacji:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImageConverter
* ICorModule
* IMetaDataConverter
Brak.

Data

W tej sekcji opisano problemy z migracją dotyczące używania zestawów danych i klientów SQL, platformy Entity Framework, linQ to SQL i serwerów danych WCF (wcześniej znanych jako ADO.NET Data Services).

Zestaw danych i klient SQL

W poniższej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Przestrzenie nazw: System.Data, , System.Data.Objects.DataClassesSystem.Data.SqlClient

Zestawy: System.Data (w System.Data.dll), System.Data.Entity (w System.Data.Entity.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Scenariusze POCO Interfejs IRelatedEnd ma nowe metody poprawy użyteczności w scenariuszach zwykłego starego obiektu CLR (POCO). Te nowe metody przyjmują Object zamiast IEntityWithRelationships jednostki jako parametr.
Edytowanie wierszy Metoda IndexOf , zgodnie z implementacją DataView klasy, teraz poprawnie zwraca wartość wiersza, który jest edytowany, zamiast zwracać -1.
Wydarzenia Zdarzenie PropertyChanged jest teraz zgłaszane, gdy wiersz jest w stanie zmodyfikowanym, a metoda jest wywoływana RejectChanges . Ta zmiana ułatwia tworzenie kontrolek interfejsu DataSet użytkownika, które uwidaczniają zawartość obiektu.
Wyjątki Metoda Prepare zgłasza teraz błąd InvalidOperationException , gdy połączenie nie jest ustawione lub otwarte zamiast NullReferenceException.
Widoki mapowania Błędy mapowania widoku zapytania są teraz przechwytywane w czasie projektowania zamiast zgłaszać NullReferenceException w czasie wykonywania.

Walidacja mapowania przechwytuje teraz błąd, w którym dwa zestawy skojarzeń w schemacie koncepcyjnym (CSDL) są mapowane na tę samą kolumnę.
Transakcje Jeśli aplikacja próbuje wykonać instrukcję na połączeniu po zakończeniu transakcji (w tym przerwanej lub wycofanej), InvalidOperationException jest teraz zgłaszany. Poprzednie wersje nie zgłosiły wyjątku i umożliwiają wykonywanie dodatkowych poleceń, nawet jeśli transakcja została przerwana.

Entity Framework

W poniższej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Przestrzenie nazw: System.Data, , System.Data.ObjectsSystem.Data.Objects.DataClasses

Zestawy: System.Data.Entity (w System.Data.Entity.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Obiekty jednostki Istnieje teraz parzystość między Detach metodą a stanem obiektu jednostki, gdy metoda jest wywoływana SaveChanges . Ta ulepszona spójność uniemożliwia zgłaszanie nieoczekiwanych wyjątków.
Jednostka SQL Ulepszono reguły dotyczące rozpoznawania identyfikatorów w usłudze Entity SQL.

Analizator Entity SQL ma ulepszoną logikę rozpoznawania identyfikatorów wieloczęściowych.
Adnotacje strukturalne Program Entity Framework rozpoznaje teraz adnotacje strukturalne.
Zapytania W zapytaniach wprowadzono następujące ulepszenia:

* Zapytanie GroupBy używające klucza null w pustej kolekcji nie zwróci żadnych wierszy, niezależnie od tego, czy w zapytaniu nie ma żadnych dodatkowych zaznaczeń.
* Wygenerowane sql w zapytaniach LINQ i Entity-SQL domyślnie traktują parametry ciągu jako wartości inne niż Unicode.

LINQ to SQL

W poniższej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Przestrzeń nazw: System.Data.Linq

Zestaw: System.Data.Linq (w System.Data.Linq.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Wydarzenia Kolekcja EntitySet<TEntity> zgłasza ListChanged teraz zdarzenie dla operacji dodawania i usuwania, jeśli EntitySet<TEntity> obiekt zostanie zwolniony, oprócz podniesienia zdarzenia podczas ładowania kolekcji.
Zapytania Skip(0) nie jest już ignorowany w zapytaniach LINQ to SQL. W związku z tym zapytania, które mają tę metodę, mogą zachowywać się inaczej. Na przykład w niektórych przypadkach klauzula OrderBy jest wymagana z elementem Skip(0), a zapytanie zgłosi NotSupportedException teraz wyjątek, jeśli klauzula OrderBy nie została uwzględniona.

Usługi danych WCF

W poniższej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Przestrzenie nazw: System.Data.Services, System.Data.Services.Client, , System.Data.Services.CommonSystem.Data.Services.Providers

Zestawy: System.Data.Services (w System.Data.Services.dll), System.Data.Services.Client (w System.Data.Services.Client.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Zawartość binarna wsadowa Usługi danych programu WCF obsługuje teraz wsadową zawartość binarną w żądaniach i odpowiedziach.
Przechwytywanie zmian Przechwytniki zmian są teraz wykonywane dla żądania usunięcia.

Przechwytywanie zmian to metoda uruchamiana za każdym razem, gdy serwer odbiera żądanie w celu zmodyfikowania jednostki w zestawie jednostek. Jest uruchamiany przed wykonaniem żądania przychodzącego. Przechwytywanie zmian zapewnia dostęp do zmienianej jednostki i wykonywanej na niej operacji.
Wyjątki Następujące warunki zgłaszają teraz bardziej przydatne wyjątki zamiast :NullReferenceException

* A TimeoutException , gdy upłynął limit czasu wywołania usługi danych.
* A DataServiceRequestException po wysłaniu nieprawidłowego żądania do usługi danych.

W aplikacjach należy zmienić obsługę wyjątków, aby przechwycić nowe wyjątki.
Nagłówki Wprowadzono następujące ulepszenia nagłówków:

* Usługi danych programu WCF teraz poprawnie odrzuca eTag nagłówek o nieokreślonej wartości.
* Usługi danych programu WCF teraz zwraca błąd i nie wykonuje żądania usunięcia żądania do łącza, gdy if-* nagłówek znajduje się w żądaniu.
* Usługi danych programu WCF teraz zwraca błąd do klienta w formacie (Atom, JSON), który klient określony w nagłówku Accept.
Czytelnik JSON Czytnik javaScript Object Notation (JSON) teraz poprawnie zwraca błąd podczas odczytywania pojedynczego ukośnika odwrotnego ("\") podczas przetwarzania ładunków JSON wysyłanych do usługi danych WCF.
Scala Wprowadzono następujące ulepszenia MergeOption wyliczenia:

MergeOption* Opcja scalania nie modyfikuje już jednostki na kliencie w wyniku każdej kolejnej odpowiedzi z usługi danych.
* Opcja jest teraz spójna MergeOption między dynamicznymi aktualizacjami sql i aktualizacjami opartymi na procedurach składowanej.
Żądania Metoda OnStartProcessingRequest jest teraz wywoływana przed przetworzeniem żądania do usług danych. Dzięki temu żądanie działa poprawnie dla ServiceOperation usług.
Strumienie Usługi danych programu WCF nie zamyka już bazowego strumienia dla operacji odczytu i zapisu.
Identyfikatory uri Ucieczka identyfikatorów URI przez klienta Usługi danych programu WCF została poprawiona.

Windows Communication Foundation (WCF)

W poniższej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Pliki konfiguracji Aby włączyć dziedziczenie zachowań za pośrednictwem hierarchii plików konfiguracji, program WCF obsługuje teraz scalanie między plikami konfiguracji.

Model dziedziczenia konfiguracji jest teraz rozszerzony, aby umożliwić użytkownikom definiowanie zachowań, które zostaną zastosowane do wszystkich usług uruchomionych na komputerze.

Zmiany zachowań mogą wystąpić, jeśli istnieją zachowania o tej samej nazwie na różnych poziomach hierarchii.
Hosting usług Nie można już określić <serviceHostingEnvironment> elementu konfiguracji na poziomie usługi, dodając atrybut allowDefinition="MachineToApplication" do definicji elementu.

Określanie <serviceHostingEnvironment> elementu na poziomie usługi jest technicznie niepoprawne i powoduje niespójne zachowanie.

Windows Presentation Foundation (WPF)

Aplikacje

Przestrzenie nazw: System.Windows, System.Windows.Controls

Zestawy: PresentationFramework (w PresentationFramework.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Obsługa wyjątków Aby umożliwić wcześniejsze wykrywanie błędów, WPF zgłasza TargetInvocationException wyjątek i ustawia InnerException właściwość na krytyczne wyjątki, takie jak NullReferenceException, , OutOfMemoryExceptionStackOverflowExceptioni SecurityException, zamiast przechwytywać oryginalny wyjątek. Brak.
Połączone zasoby Aby ułatwić łączenie, pliki zasobów (takie jak obrazy), które znajdują się w lokalizacji innej niż struktura folderów projektu, używają pełnej ścieżki pliku zasobów zamiast tylko jego nazwy pliku jako identyfikatora zasobu podczas kompilowania aplikacji. Aplikacja będzie mogła zlokalizować pliki w czasie wykonywania. Brak.
Aplikacje częściowo zaufane W przypadku zagadnień dotyczących zabezpieczeń aplikacje oparte na systemie Windows, które działają w częściowym zaufaniu i zawierają kontrolkę lub kontrolkę WebBrowser zawierającą FrameSecurityException kod HTML, zgłosi wyjątek podczas tworzenia kontrolki.

Aplikacje przeglądarki będą zgłaszać wyjątek i wyświetlać komunikat, jeśli zostaną spełnione wszystkie następujące warunki:

* Aplikacja działa w przeglądarce Firefox.
* Aplikacja działa w częściowym zaufaniu w strefie internetowej z witryn niezaufanych.
* Aplikacja zawiera kontrolkę lub kontrolkę WebBrowser zawierającą Frame kod HTML.

Nie będzie to miało wpływu na aplikacje uruchamiane z zaufanych witryn lub ze strefy intranetu.
W aplikacjach przeglądarki można złagodzić tę zmianę, wykonując jedną z następujących czynności:

* Uruchom aplikację przeglądarki w pełnym zaufaniu.
* Klienci muszą dodać witrynę aplikacji do strefy zaufanych witryn.
Słowniki zasobów Aby ulepszyć słowniki zasobów na poziomie motywu i uniemożliwić ich zmianę, zamrażalne zasoby zdefiniowane w słowniku zasobów i scalone ze słownikiem na poziomie motywu są teraz zawsze oznaczone jako zamrożone i są niezmienne. Jest to oczekiwane zachowanie w przypadku zasobów z możliwością zamrożenia. Aplikacje modyfikujące zasób zdefiniowany w słowniku scalanym na poziomie motywu powinny sklonować zasób i zmodyfikować sklonowaną kopię. Alternatywnie zasób można oznaczyć x:Shared="false" tak, aby ResourceDictionary tworzył nową kopię za każdym razem, gdy zostanie zapytany zasób.
Windows 7 Aby aplikacje WPF działały lepiej w systemie Windows 7, wprowadzono następujące ulepszenia w celu poprawienia zachowania okna:

* Stan docku i gestu działa teraz zgodnie z oczekiwaniami na podstawie interakcji użytkownika.
* Polecenia paska zadań Kaskadowe okna, Pokaż okna skumulowane i Pokaż okna obok siebie mają teraz poprawne zachowanie i zaktualizuj odpowiednie właściwości.
* Właściwości Top, Left, Widthi Height dla zmaksymalizowanego lub zminimalizowanego okna zawierają teraz prawidłową lokalizację przywracania okna zamiast innych wartości, w zależności od monitora.
Brak.
Styl i przezroczystość systemu Windows Element InvalidOperationException jest zgłaszany, jeśli próbujesz ustawić WindowStyle wartość inną niż WindowStyle w przypadku AllowsTransparency wartości i trueWindowState ma wartość WindowState. Jeśli musisz zmienić WindowStyle wartość when AllowsTransparency to true, możesz wywołać funkcję Win32 SetWindowLongPtr .
Xps WPF nie zawiera pakietu Microsoft XML Paper Specification Essentials Pack (XPSEP). System XPSEP jest dołączony do systemów Windows 7 i Windows Vista.

Na komputerze z systemem Windows XP bez zainstalowanego programu .NET Framework 3.5 z dodatkiem SP1 drukowanie przy użyciu interfejsu API WPF innego niż w PrintDialog systemie będzie polegać na puli WINSPOOL. Niektóre funkcje drukarki nie zostaną zgłoszone, a niektóre ustawienia drukarki nie zostaną zastosowane podczas drukowania.
W razie potrzeby zainstaluj pakiet Microsoft XML Paper Specification Essentials Pack.

Kontrolki

Przestrzenie nazw: System.Windows, System.Windows.Controls, , System.Windows.DataSystem.Windows.Input

Zestawy: PresentationFramework (w PresentationFramework.dll), PresentationCore (w PresentationCore.dll), WindowsBase (w WindowsBase.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Okien dialogowych Aby zwiększyć niezawodność, ShowDialog metoda jest wywoływana w tym samym wątku, który utworzył kontrolkę FileDialog . Pamiętaj, aby utworzyć kontrolkę i wywołać ShowDialog metodę FileDialog w tym samym wątku.
Okna przestawne Aby naprawić logikę przywracania fokusu, która niepoprawnie reaktywuje przestawne okno (co sprawia, że jest wyświetlane jak modalne okno dialogowe), przywracanie fokusu jest teraz blokowane, jeśli kandydat nie jest elementem podrzędnym okna. Brak.
Elementy w kolekcjach Gdy element zostanie przeniesiony lub dodany do kolekcji bazowej, pojawi się w CollectionView tej samej lokalizacji względnej, jeśli CollectionView element nie zostanie posortowany. Zapewnia to spójność między pozycją elementu w kolekcji a skojarzonym CollectionViewelementem . ContainerFromItem Użyj metody orIndexOf, aby znaleźć lokalizację elementu w CollectionView elemencie zamiast polegać na stałej lokalizacji elementu.
Układy Aby wyeliminować niepotrzebne ponowne układy, zmiana ShowsNavigationUI układu nie powoduje już unieważnienia układu lub powoduje przekazanie innego układu. Jeśli spodziewasz się, że zmiana ShowsNavigationUI spowoduje przekazanie innego układu, wywołaj metodę InvalidateVisual po ustawieniu właściwości .
Menu Aby włączyć tekst ClearType w wyskakujących okienkach menu, wprowadzono modyfikacje ControlTemplate klasy i kontrolki MenuItem i innych kontrolek. Aplikacje nie powinny polegać na strukturze wizualnej szablonów kontrolek. Tylko nazwane części elementu ControlTemplate są częścią umowy publicznej. Jeśli aplikacja musi znaleźć określony obiekt w ControlTemplateobiekcie , wyszukaj w drzewie wizualizacji określony typ zamiast polegać na stałej lokalizacji obiektu w drzewie.
Nawigacja Jeśli obiekt Frame przechodzi bezpośrednio do lokalizacji, IsNavigationInitiator właściwość znajduje się true po początkowej nawigacji. Ta zmiana uniemożliwia wywoływanie dodatkowych zdarzeń podczas scenariuszy uruchamiania. Brak.
Pop-upy Delegat CustomPopupPlacementCallback może być teraz wywoływany wiele razy podczas przekazywania układu, a nie tylko raz. CustomPopupPlacementCallback Jeśli delegat oblicza położenie elementu Popup na podstawie poprzedniej pozycji, oblicz ponownie pozycję tylko wtedy, gdy wartości popupSizeparametrów , targetSizelub offset zmienią się.
Wartości właściwości Metoda SetCurrentValue umożliwia teraz ustawienie właściwości na wartość obowiązującą, chociaż nadal uwzględnia wszelkie powiązania, styl lub wyzwalacz, który ma wpływ na właściwość. Autorzy kontrolek powinni używać SetCurrentValue zawsze, gdy wartość właściwości zmienia się jako efekt uboczny innych akcji, w tym manipulowania użytkownikami.
Pola tekstowe W przypadku zagadnień Copy dotyczących zabezpieczeń metody i Cut w trybie dyskretnym kończą się niepowodzeniem, gdy są wywoływane w częściowym zaufaniu.

Ponadto programowe wykonywanie Copy właściwości lub Cut w kontrolce dziedziczonej po TextBoxBase kontrolce zostanie zablokowane w częściowym zaufaniu. Jednak polecenia kopiowania i wycinania inicjowane przez użytkownika, takie jak kliknięcie przycisku, którego Command właściwość jest powiązana z jednym z tych poleceń, będzie działać. Standardowe kopiowanie i wycinanie skrótów klawiaturowych, a menu kontekstowe będzie nadal działać tak jak wcześniej w częściowym zaufaniu.
Powiąż polecenie Copy lub Cut z akcją zainicjowaną przez użytkownika, taką jak kliknięcie przycisku.

Karty graficzne

Przestrzenie nazw: System.Windows, System.Windows.Controls, System.Windows.Data, , System.Windows.InputSystem.Windows.Media.Effects

Zestawy: PresentationFramework (w PresentationFramework.dll), PresentationCore (w PresentationCore.dll), WindowsBase (w WindowsBase.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Efekty mapy bitowej Aby zwiększyć wydajność, BitmapEffect klasa i klasy dziedziczone z BitmapEffect klasy, mimo że nadal istnieją, są wyłączone. Efekt będzie renderowany przy użyciu potoku renderowania przyspieszonego sprzętowo, jeśli spełnione są następujące warunki:

* Aplikacja używa obiektu DropShadowBitmapEffect lub BlurBitmapEffect , który ma właściwość radius ustawioną mniej niż 100 jednostek DIU.
* Karta wideo na komputerze z uruchomioną aplikacją obsługuje cieniowanie pikseli 2.0.

Jeśli te warunki nie zostaną spełnione, BitmapEffect obiekt nie będzie miał wpływu.

Ponadto program Visual Studio tworzy ostrzeżenie kompilatora, gdy napotka obiekt lub podklasę BitmapEffect .

Metoda PushEffect jest oznaczona jako przestarzała.
Przestań używać starszych BitmapEffect i pochodnych klas, a zamiast tego użyj nowych klas pochodnych z Effectklasy : BlurEffect, DropShadowEffecti ShaderEffect.

Możesz również utworzyć własne efekty, dziedzicząc po ShaderEffect klasie.
Ramki mapy bitowej Sklonowane BitmapFrame obiekty odbierają DownloadProgressteraz zdarzenia , DownloadCompletedi DownloadFailed . Umożliwia to prawidłowe działanie obrazów pobranych z sieci Web i zastosowanych do kontrolki Image za pomocą elementu .Style

Zobaczysz zmianę zachowania tylko wtedy, gdy wszystkie następujące instrukcje są prawdziwe:

* Subskrybujesz DownloadProgresszdarzenie , DownloadCompletedlub DownloadFailed .
* Źródło obiektu BitmapFrame pochodzi z sieci Web.
* Plik BitmapFrame jest klonowany, gdy pobieranie jest nadal w toku.
Sprawdź nadawcę w procedurze obsługi zdarzeń i podejmij działania tylko wtedy, gdy nadawca jest oryginalnym BitmapFrameelementem .
Dekodowanie obrazów Aby zapobiec nieobsługiwanemuIOException, gdy obrazy mogą nie dekodować, klasa zgłosi DecodeFailed zdarzenie, BitmapSource gdy nie zdekoduje obrazu. Usuń wszelkie procedury obsługi wyjątków dla IOExceptionprogramu i użyj DecodeFailed zdarzenia, aby sprawdzić błąd dekodowania.

Dane wejściowe

Przestrzenie nazw: System.Windows, System.Windows.Controls, , System.Windows.DataSystem.Windows.Input

Zestawy: PresentationFramework (w PresentationFramework.dll), PresentationCore (w PresentationCore.dll), WindowsBase (w WindowsBase.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Tworzenie powiązań wystąpień poleceń Aby zapewnić mechanizm powiązania wystąpień poleceń opartych na modelu widoku z gestami wejściowymi opartymi na widoku, InputBinding klasa dziedziczy teraz z Freezable zamiast DependencyObject. Następujące właściwości są teraz właściwościami zależności:

* Command
* CommandParameter
* CommandTarget

Ta zmiana powoduje następujące kwestie:

InputBinding* Obiekt jest teraz zamrożony, gdy jest zarejestrowany, a nie pozostaje modyfikowalny.
* Nie można uzyskać dostępu do obiektów na poziomie InputBinding wystąpienia z wielu wątków ze względu na ograniczenia DependencyObject klasy.
* Nie można mutować powiązań wejściowych na poziomie klasy po ich rejestracji, ze względu na ograniczenia Freezable klasy.
* Nie można określić powiązań wejściowych dla wystąpień poleceń utworzonych w modelu widoków.
Utwórz oddzielne wystąpienia InputBinding klasy w oddzielnych wątkach, jeśli powiązania mają być modyfikowalne lub w przeciwnym razie je zamrozić. Nie mutuj statycznego InputBinding poziomu klasy po zarejestrowaniu.
Aplikacje przeglądarki Aplikacje przeglądarki WPF (. XBAP) przetwarza teraz kluczowe zdarzenia tak jak autonomiczne aplikacje WPF, aby obiekty odbierały kierowane zdarzenia kluczy w prawidłowej kolejności. Brak.
Kombinacje klawiszy nieaktywnych WPF zaciemnia martwe klucze, które nie generują widocznego znaku, ale zamiast tego wskazuje, że klucz ma być połączony z następnym klawiszem litery w celu utworzenia jednego znaku. Kluczowe zdarzenia wejściowe, takie jak KeyDownEvent zdarzenie, zgłaszają, kiedy klucz jest martwy, ustawiając Key właściwość na Key wartość. Zwykle jest to oczekiwane zachowanie, ponieważ aplikacje zwykle nie zamierzają reagować na dane wejściowe klawiatury, które tworzą połączony znak. Aplikacje, które oczekują odczytu kluczy, które były częścią połączonych znaków, mogą uzyskać teraz zaciemniony klucz przy użyciu DeadCharProcessedKey właściwości .
Menedżer fokusu FocusManager.GetFocusedElement(DependencyObject) Gdy metoda jest przekazywana element, który ma właściwość dołączoną IsFocusScope na truewartość , metoda zwraca element, który jest ostatnim elementem skoncentrowanym na klawiaturze w tym zakresie fokusu, jeśli i tylko wtedy, gdy zwrócony element należy do tego samego PresentationSource obiektu co element, który jest przekazywany do metody. Brak.

Automatyzacja interfejsu użytkownika

Przestrzeń nazw: System.Windows, , System.Windows.Automation.ProviderSystem.Windows.Automation.Peers, System.Windows.Controls, System.Windows.DataSystem.Windows.Input

Zestawy: PresentationFramework (w PresentationFramework.dll), PresentationCore (w PresentationCore.dll), UIAutomationProvider (w UIAutomationProvider.dll), WindowsBase (w WindowsBase.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Hierarchia klas widoków Klasy TreeViewAutomationPeer i TreeViewItemAutomationPeer dziedziczą z ItemsControlAutomationPeer klasy FrameworkElementAutomationPeerzamiast . Jeśli dziedziczysz klasy TreeViewItemAutomationPeer i zastępujesz metodę GetChildrenCore , rozważ zwrócenie obiektu dziedziczonego z nowej TreeViewDataItemAutomationPeer klasy.
Kontenery wyłączone z ekranu Aby naprawić niepoprawną wartość zwracaną, IsOffscreenCore metoda teraz poprawnie zwraca false kontenery elementów, które są przewijane z widoku. Ponadto wartość metody nie ma wpływu na oklusion przez inne okna lub przez to, czy element jest widoczny na określonym monitorze. Brak.
Menu i obiekty podrzędne Aby włączyć automatyzację interfejsu użytkownika menu, które zawierają elementy podrzędne inne niż MenuItem obiekty, GetChildrenCore metoda zwraca AutomationPeer teraz obiekt obiektu podrzędnego UIElement , a nie MenuItemAutomationPeer obiektu. Brak.
Nowe interfejsy i zestawy Aby włączyć nowe funkcje automatyzacji interfejsu użytkownika, dodano następujące interfejsy:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
Każdy projekt tworzący równorzędne automatyzacji WPF musi dodać jawne odwołanie do UIAutomationProvider.dll.
Kciuki Metoda GetClassNameCore zwraca wartość zamiast wartości null. W związku z tym kontrolki, takie jak GridSplitter dziedziczone z Thumb klasy, będą zgłaszać nazwę automatyzacja interfejsu użytkownika. Brak.
Elementy zwirtualizowane Aby zwiększyć wydajność, GetChildrenCore metoda zwraca tylko obiekty podrzędne, które są rzeczywiście w drzewie wizualizacji, zamiast wszystkich obiektów podrzędnych, niezależnie od tego, czy są one zwirtualizowane. Użyj ItemContainerPattern polecenia , aby iterować wszystkie elementy obiektu ItemsControlAutomationPeer.

XAML

Przestrzenie nazw: System.Windows, System.Windows.Controls, System.Windows.Data, , System.Windows.InputSystem.Windows.Markup

Zestawy: PresentationFramework (w PresentationFramework.dll), PresentationCore (w PresentationCore.dll), WindowsBase (w WindowsBase.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1 Zalecane zmiany
Rozszerzenie znaczników WPF teraz poprawnie używa wartości z ProvideValue metody zamiast zwracania MarkupExtension obiektu w niektórych przypadkach, gdy rozszerzenie znaczników jest używane do ustawiania właściwości lub tworzenia elementu w kolekcji. Rozszerzenie znaczników może zwrócić się w niektórych przypadkach. Jeśli aplikacja uzyskuje dostęp do zasobu, który zwrócił MarkupExtension obiekt we wcześniejszych wersjach, odwołaj się do obiektu zwróconego z ProvideValue, a nie MarkupExtension obiektu.
Analizowanie atrybutów Atrybuty w języku XAML mogą teraz mieć tylko jeden okres. Na przykład następujące elementy są prawidłowe:

<Button Background="Red"/> (bez krosek)

<Button Button.Background = "Red"/> (jeden okres)

Następujące informacje nie są już prawidłowe:

<Button Control.Button.Background = "Red"/> (więcej niż jeden okres)
Popraw atrybuty XAML, które mają więcej niż jeden okres.

XML

W wierszach w tej tabeli opisano ulepszenia funkcji, które wcześniej miały ograniczenia lub inne problemy.

Schemat i przekształcenia

Przestrzenie nazw: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Zestawy: System.Xml (w System.Xml.dll), System.Xml.Linq (w System.Xml.Linq.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Schematy kameleonu Aby zapobiec uszkodzeniu danych, schematy kameleonu są teraz prawidłowo klonowane, gdy są one dołączone do wielu schematów.

Schematy chameleonu to schematy, które nie mają docelowej przestrzeni nazw, a gdy są zawarte w innym XSD, przyjmują docelową przestrzeń nazw schematu importowania. Są one często używane do dołączania typowych typów do schematu.
Funkcje identyfikatorów Funkcja identyfikatora XSLT zwraca teraz poprawną wartość zamiast wartości null, gdy XmlReader obiekt jest przekazywany do pliku XLST.

Jeśli użytkownik utworzył XmlReader obiekt z klasy LINQ to XML przy użyciu CreateReader metody , a ten XmlReader obiekt został przekazany do XSLT, wszystkie wystąpienia id funkcji w XSLT wcześniej zwróciły wartość null. Nie jest to dozwolona wartość zwracana dla id funkcji.
Atrybut przestrzeni nazw Aby zapobiec uszkodzeniu danych, XPathNavigator obiekt zwraca teraz lokalną nazwę atrybutu x:xmlns poprawnie.
Deklaracje przestrzeni nazw Obiekt XmlReader na poddrzewie nie tworzy już zduplikowanych deklaracji przestrzeni nazw w ramach jednego elementu XML.
Weryfikacja schematu Aby zapobiec błędnej weryfikacji schematu, XmlSchemaSet klasa umożliwia poprawne i spójne kompilowanie schematów XSD. Te schematy mogą zawierać inne schematy; na przykład może zawierać B.xsdwartość A.xsd , która może zawierać C.xsdwartość . Kompilowanie dowolnej z tych przyczyn powoduje przechodzenie tego grafu zależności.
Funkcje skryptu Funkcja dostępna nie jest już niepoprawnie zwracanafalse, gdy funkcja jest faktycznie dostępna.
Identyfikatory uri Metoda Load zwraca teraz prawidłowy identyfikator BaseURI w zapytaniach LINQ.

Walidacja

Przestrzenie nazw: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Zestawy: System.Xml (w System.Xml.dll), System.Xml.Linq (w System.Xml.Linq.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Rozpoznawanie przestrzeni nazw Metoda ReadContentAs nie ignoruje już przekazanego IXmlNamespaceResolver do niego narzędzia rozpoznawania nazw.

W poprzednich wersjach określony program rozpoznawania przestrzeni nazw został zignorowany i XmlReader zamiast tego został użyty.
Odstępu Aby zapobiec utracie danych podczas tworzenia czytnika, Create metoda nie odrzuca już znaczących białych znaków.

Walidacja XML rozpoznaje kod mieszany con tryb namiotu, gdzie tekst może być mieszany z adiustacjami XML. W trybie mieszanym wszystkie białe znaki są znaczące i powinny być zgłaszane.

Zapisywanie

Przestrzenie nazw: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Zestawy: System.Xml (w System.Xml.dll), System.Xml.Linq (w System.Xml.Linq.dll)

Funkcja Różnice z wersji 3.5 z dodatkiem SP1
Odwołania do encji Aby zapobiec uszkodzeniu danych, odwołania do jednostek nie są już dwukrotnie tytułowane w atrybutach XML.

Jeśli użytkownik próbował zapisać jednostkę w xmlns atrybucie lub w xml:lang atrybucie WriteEntityRef lub xml:space przy użyciu metody, jednostka została dwukrotnie ztytułowana w danych wyjściowych, dlatego uszkodziła dane.
Obsługa nowego wiersza Aby zapobiec uszkodzeniu danych, XmlWriter obiekty przestrzegają NewLineHandling opcji.

Zobacz też