Bagikan melalui


Apa yang Baru di ASP.NET 4.5 dan Visual Studio 2012

Dokumen ini menjelaskan fitur dan penyempurnaan baru yang diperkenalkan di ASP.NET 4.5. Ini juga menjelaskan peningkatan yang dilakukan untuk pengembangan web di Visual Studio 2012. Dokumen ini awalnya diterbitkan pada 29 Februari 2012.

ASP.NET Core Runtime dan Framework

Membaca dan Menulis Permintaan dan Respons HTTP Secara Asinkron

ASP.NET 4 memperkenalkan kemampuan untuk membaca entitas permintaan HTTP sebagai aliran menggunakan metode HttpRequest.GetBufferlessInputStream . Metode ini menyediakan akses streaming ke entitas permintaan. Namun, itu dijalankan secara sinkron, yang mengikat utas selama durasi permintaan.

ASP.NET 4.5 mendukung kemampuan untuk membaca aliran secara asinkron pada entitas permintaan HTTP, dan kemampuan untuk menyiram secara asinkron. ASP.NET 4.5 juga memberi Anda kemampuan untuk buffer ganda entitas permintaan HTTP, yang menyediakan integrasi yang lebih mudah dengan handler HTTP hilir seperti handler halaman .aspx dan pengontrol MVC ASP.NET.

Penyempurnaan penanganan HttpRequest

Referensi Stream yang dikembalikan oleh ASP.NET 4.5 dari HttpRequest.GetBufferlessInputStream mendukung metode baca sinkron dan asinkron. Objek Stream yang dikembalikan dari GetBufferlessInputStream sekarang mengimplementasikan metode BeginRead dan EndRead. Metode Stream asinkron memungkinkan Anda membaca entitas permintaan secara asinkron dalam gugus, sementara ASP.NET merilis utas saat ini antara setiap perulangan perulangan baca asinkron.

ASP.NET 4.5 juga telah menambahkan metode pendamping untuk membaca entitas permintaan dengan cara yang di-buffer: HttpRequest.GetBufferedInputStream. Kelebihan beban baru ini berfungsi seperti GetBufferlessInputStream, mendukung bacaan sinkron dan asinkron. Namun, saat dibaca, GetBufferedInputStream juga menyalin byte entitas ke dalam buffer internal ASP.NET sehingga modul dan handler hilir masih dapat mengakses entitas permintaan. Misalnya, jika beberapa kode upstream dalam alur telah membaca entitas permintaan menggunakan GetBufferedInputStream, Anda masih dapat menggunakan HttpRequest.Form atau HttpRequest.Files. Ini memungkinkan Anda melakukan pemrosesan asinkron pada permintaan (misalnya, streaming unggahan file besar ke database), tetapi masih menjalankan halaman .aspx dan pengontrol ASP.NET MVC setelahnya.

Menyiram respons secara asinkron

Mengirim respons ke klien HTTP dapat memakan waktu yang cukup lama ketika klien jauh atau memiliki koneksi bandwidth rendah. Biasanya ASP.NET buffer byte respons saat dibuat oleh aplikasi. ASP.NET kemudian melakukan operasi pengiriman tunggal dari buffer yang terakumulasi pada akhir pemrosesan permintaan.

Jika respons buffer berukuran besar (misalnya, streaming file besar ke klien), Anda harus secara berkala memanggil HttpResponse.Flush untuk mengirim output buffer ke klien dan menjaga penggunaan memori tetap terkendali. Namun, karena Flush adalah panggilan sinkron, secara berulang memanggil Flush masih menggunakan utas selama durasi permintaan yang berpotensi berjalan lama.

ASP.NET 4.5 menambahkan dukungan untuk melakukan flush secara asinkron menggunakan metode BeginFlush dan EndFlush dari kelas HttpResponse . Dengan menggunakan metode ini, Anda dapat membuat modul asinkron dan handler asinkron yang secara bertahap mengirim data ke klien tanpa mengikat utas sistem operasi. Di antara panggilan BeginFlush dan EndFlush , ASP.NET merilis utas saat ini. Ini secara substansial mengurangi jumlah total utas aktif yang diperlukan untuk mendukung unduhan HTTP yang berjalan lama.

Dukungan untuk menunggu dan Tugas - Modul dan Handler Asinkron Berbasis

.NET Framework 4 memperkenalkan konsep pemrograman asinkron yang disebut sebagai tugas. Tugas diwakili oleh jenis Tugas dan tipe terkait di namespace System.Threading.Tasks . .NET Framework 4.5 dibangun di atasnya dengan penyempurnaan kompilator yang membuat bekerja dengan objek Tugas menjadi sederhana. Dalam .NET Framework 4.5, kompilator mendukung dua kata kunci baru: tunggu dan asinkron. Kata kunci yang ditunggu adalah singkatan sintis untuk menunjukkan bahwa sepotong kode harus secara asinkron menunggu pada beberapa bagian kode lainnya. Kata kunci asinkron mewakili petunjuk yang dapat Anda gunakan untuk menandai metode sebagai metode asinkron berbasis tugas.

Kombinasi menunggu, asinkron, dan objek Tugas membuatnya jauh lebih mudah bagi Anda untuk menulis kode asinkron di .NET 4.5. ASP.NET 4.5 mendukung penyederhanaan ini dengan API baru yang memungkinkan Anda menulis modul HTTP asinkron dan handler HTTP asinkron menggunakan peningkatan kompilator baru.

Modul HTTP asinkron

Misalkan Anda ingin melakukan pekerjaan asinkron dalam metode yang mengembalikan objek Tugas . Contoh kode berikut mendefinisikan metode asinkron yang melakukan panggilan asinkron untuk mengunduh halaman beranda Microsoft. Perhatikan penggunaan kata kunci asinkron dalam tanda tangan metode dan panggilan tunggu ke DownloadStringTaskAsync.

private async Task
ScrapeHtmlPage(object caller, EventArgs e)
{
    WebClient wc = new WebClient();
    var result = await wc.DownloadStringTaskAsync("http://www.microsoft.com");
    // Do something with the result
}

Itu saja yang harus Anda tulis — .NET Framework akan secara otomatis menangani melepas tumpukan panggilan sambil menunggu unduhan selesai, serta secara otomatis memulihkan tumpukan panggilan setelah unduhan selesai.

Sekarang misalkan Anda ingin menggunakan metode asinkron ini dalam modul HTTP ASP.NET asinkron. ASP.NET 4.5 menyertakan metode pembantu (EventHandlerTaskAsyncHelper) dan jenis delegasi baru (TaskEventHandler) yang dapat Anda gunakan untuk mengintegrasikan metode asinkron berbasis tugas dengan model pemrograman asinkron yang lebih lama yang diekspos oleh alur HTTP ASP.NET. Contoh ini menunjukkan cara:

public void Init(HttpApplication
context)
 {
   // Wrap the Task-based method so that it can be used with 
   // the older async programming model.
   EventHandlerTaskAsyncHelper helper = 
       new EventHandlerTaskAsyncHelper(ScrapeHtmlPage);
 
   // The helper object makes it easy to extract Begin/End methods out of
   // a method that returns a Task object. The ASP.NET pipeline calls the 
   // Begin and End methods to start and complete calls on asynchronous 
   // HTTP modules.
   context.AddOnPostAuthorizeRequestAsync(
       helper.BeginEventHandler, helper.EndEventHandler);
}

Handler HTTP asinkron

Pendekatan tradisional untuk menulis handler asinkron di ASP.NET adalah dengan mengimplementasikan antarmuka IHttpAsyncHandler . ASP.NET 4.5 memperkenalkan jenis dasar asinkron HttpTaskAsyncHandler yang dapat Anda dapatkan, yang membuatnya jauh lebih mudah untuk menulis handler asinkron.

Jenis HttpTaskAsyncHandler abstrak dan mengharuskan Anda mengambil alih metode ProcessRequestAsync . Secara internal ASP.NET mengurus integrasi tanda tangan pengembalian (objek Tugas) ProcessRequestAsync dengan model pemrograman asinkron yang lebih lama yang digunakan oleh alur ASP.NET.

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan Tugas dan menunggu sebagai bagian dari implementasi handler HTTP asinkron:

public class MyAsyncHandler : HttpTaskAsyncHandler
{
    // ...
     
    // ASP.NET automatically takes care of integrating the Task based override
    // with the ASP.NET pipeline.
    public override async Task ProcessRequestAsync(HttpContext context)
    {
        WebClient wc = new WebClient();
        var result = await 
           wc.DownloadStringTaskAsync("http://www.microsoft.com");
        // Do something with the result
    }
}

Fitur Validasi Permintaan ASP.NET Baru

Secara default, ASP.NET melakukan validasi permintaan — ini memeriksa permintaan untuk mencari markup atau skrip di bidang, header, cookie, dan sebagainya. Jika ada yang terdeteksi, ASP.NET melempar pengecualian. Ini bertindak sebagai garis pertahanan pertama terhadap potensi serangan pembuatan skrip lintas situs.

ASP.NET 4.5 memudahkan untuk membaca data permintaan yang tidak valid secara selektif. ASP.NET 4.5 juga mengintegrasikan pustaka AntiXSS populer, yang sebelumnya merupakan pustaka eksternal.

Pengembang sering meminta kemampuan untuk secara selektif menonaktifkan validasi permintaan untuk aplikasi mereka. Misalnya, jika aplikasi Anda adalah perangkat lunak forum, Anda mungkin ingin mengizinkan pengguna mengirimkan posting dan komentar forum berformat HTML, tetapi masih memastikan bahwa validasi permintaan memeriksa yang lain.

ASP.NET 4.5 memperkenalkan dua fitur yang memudahkan Anda bekerja secara selektif dengan input yang tidak valid: validasi permintaan yang ditangguhkan ("malas") dan akses ke data permintaan yang tidak valid.

Validasi permintaan yang ditangguhkan ("malas")

Dalam ASP.NET 4.5, secara default semua data permintaan tunduk pada validasi permintaan. Namun, Anda dapat mengonfigurasi aplikasi untuk menunda validasi permintaan hingga Anda benar-benar mengakses data permintaan. (Ini kadang-kadang disebut sebagai validasi permintaan malas, berdasarkan istilah seperti pemuatan malas untuk skenario data tertentu.) Anda dapat mengonfigurasi aplikasi untuk menggunakan validasi yang ditangguhkan dalam file Web.config dengan mengatur atribut requestValidationMode ke 4.5 di elemen httpRUntime , seperti dalam contoh berikut:

<httpRuntime requestValidationMode="4.5" ... />

Saat mode validasi permintaan diatur ke 4.5, validasi permintaan hanya dipicu untuk nilai permintaan tertentu dan hanya saat kode Anda mengakses nilai tersebut. Misalnya, jika kode Anda mendapatkan nilai Request.Form["forum_post"], validasi permintaan hanya dipanggil untuk elemen tersebut dalam kumpulan formulir. Tidak ada elemen lain dalam koleksi Formulir yang divalidasi. Dalam versi ASP.NET sebelumnya, validasi permintaan dipicu untuk seluruh kumpulan permintaan ketika elemen apa pun dalam koleksi diakses. Perilaku baru memudahkan komponen aplikasi yang berbeda untuk melihat potongan data permintaan yang berbeda tanpa memicu validasi permintaan pada bagian lain.

Dukungan untuk permintaan yang tidak valid

Validasi permintaan yang ditangguhkan saja tidak menyelesaikan masalah melewati validasi permintaan secara selektif. Panggilan ke Request.Form["forum_post"] masih memicu validasi permintaan untuk nilai permintaan tertentu tersebut. Namun, Anda mungkin ingin mengakses bidang ini tanpa memicu validasi karena Anda ingin mengizinkan markup di bidang tersebut.

Untuk mengizinkan ini, ASP.NET 4.5 sekarang mendukung akses yang tidak valid ke data permintaan. ASP.NET 4.5 menyertakan properti koleksi baru Yang Tidak Divalidasi di kelas HttpRequest . Koleksi ini menyediakan akses ke semua nilai umum data permintaan, seperti Formulir, QueryString, Cookie, dan Url.

Dengan menggunakan contoh forum, untuk dapat membaca data permintaan yang tidak valid, Anda harus terlebih dahulu mengonfigurasi aplikasi untuk menggunakan mode validasi permintaan baru:

<httpRuntime requestValidationMode="4.5" ...
/>

Anda kemudian dapat menggunakan properti HttpRequest.Unvalidated untuk membaca nilai formulir yang tidak valid:

var s = context.Request.Unvalidated.Form["forum_post"];

Peringatan

Keamanan - Gunakan data permintaan yang tidak valid dengan hati-hati! ASP.NET 4.5 menambahkan properti permintaan dan koleksi yang tidak valid untuk memudahkan Anda mengakses data permintaan yang sangat spesifik yang tidak valid. Namun, Anda masih harus melakukan validasi kustom pada data permintaan mentah untuk memastikan bahwa teks berbahaya tidak dirender kepada pengguna.

Pustaka Antixss

Karena popularitas Microsoft AntiXSS Library, ASP.NET 4.5 sekarang menggabungkan rutinitas pengodean inti dari pustaka versi 4.0 tersebut.

Rutinitas pengodean diimplementasikan oleh jenis AntiXssEncoder di namespace Layanan System.Web.Security.AntiXss baru. Anda dapat menggunakan jenis AntiXssEncoder secara langsung dengan memanggil salah satu metode pengodean statis yang diimplementasikan dalam jenis . Namun, pendekatan termampu untuk menggunakan rutinitas anti-XSS baru adalah mengonfigurasi aplikasi ASP.NET untuk menggunakan kelas AntiXssEncoder secara default. Untuk melakukan ini, tambahkan atribut berikut ke file Web.config:

<httpRuntime ...
  encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Ketika atribut encoderType diatur untuk menggunakan jenis AntiXssEncoder, semua pengodean output di ASP.NET secara otomatis menggunakan rutinitas pengodean baru.

Ini adalah bagian dari pustaka AntiXSS eksternal yang telah dimasukkan ke dalam ASP.NET 4.5:

  • HtmlEncode, HtmlFormUrlEncode, dan HtmlAttributeEncode
  • XmlAttributeEncode dan XmlEncode
  • UrlEncode dan UrlPathEncode (baru)
  • CssEncode

Dukungan untuk Protokol WebSockets

Protokol WebSockets adalah protokol jaringan berbasis standar yang menentukan cara membangun komunikasi dua arah yang aman dan real-time antara klien dan server melalui HTTP. Microsoft telah bekerja dengan badan standar IETF dan W3C untuk membantu menentukan protokol. Protokol WebSockets didukung oleh klien mana pun (bukan hanya browser), dengan Microsoft menginvestasikan sumber daya substansial yang mendukung protokol WebSockets pada sistem operasi klien dan seluler.

Protokol WebSockets membuatnya jauh lebih mudah untuk membuat transfer data yang berjalan lama antara klien dan server. Misalnya, menulis aplikasi obrolan jauh lebih mudah karena Anda dapat membuat koneksi jangka panjang yang sebenarnya antara klien dan server. Anda tidak perlu menggunakan solusi seperti polling berkala atau polling panjang HTTP untuk mensimulasikan perilaku soket.

ASP.NET 4.5 dan IIS 8 mencakup dukungan WebSocket tingkat rendah, memungkinkan pengembang ASP.NET menggunakan API terkelola untuk membaca dan menulis data string dan biner secara asinkron pada objek WebSockets. Untuk ASP.NET 4.5, ada namespace Layanan System.Web.WebSockets baru yang berisi tipe untuk bekerja dengan protokol WebSockets.

Klien browser membuat koneksi WebSockets dengan membuat objek DOM WebSocket yang menunjuk ke URL dalam aplikasi ASP.NET, seperti dalam contoh berikut:

socket = new WebSocket("ws://contoso.com/MyWebSocketApplication.ashx");

Anda dapat membuat titik akhir WebSockets di ASP.NET menggunakan segala jenis modul atau handler. Dalam contoh sebelumnya, file .ashx digunakan, karena file .ashx adalah cara cepat untuk membuat handler.

Menurut protokol WebSockets, aplikasi ASP.NET menerima permintaan WebSocket klien dengan menunjukkan bahwa permintaan harus ditingkatkan dari permintaan HTTP GET ke permintaan WebSockets. Berikut contohnya:

HttpContext.Current.AcceptWebSocketRequest(// WebSocket delegate goes here)

Metode AcceptWebSocketRequest menerima delegasi fungsi karena ASP.NET melepaskan permintaan HTTP saat ini lalu mentransfer kontrol ke delegasi fungsi. Secara konseptual pendekatan ini mirip dengan cara Anda menggunakan System.Threading.Thread, di mana Anda menentukan delegasi thread-start tempat pekerjaan latar belakang dilakukan.

Setelah ASP.NET dan klien berhasil menyelesaikan jabat tangan WebSockets, ASP.NET memanggil delegasi Anda dan aplikasi WebSockets mulai berjalan. Contoh kode berikut menunjukkan aplikasi gema sederhana yang menggunakan dukungan WebSocket bawaan di ASP.NET:

public async Task MyWebSocket(AspNetWebSocketContext context)
{
    WebSocket socket = context.WebSocket;
    while (true)
    {
        ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);

        // Asynchronously wait for a message to arrive from a client
        WebSocketReceiveResult result = 
           await socket.ReceiveAsync(buffer, CancellationToken.None);

        // If the socket is still open, echo the message back to the client
        if (socket.State == WebSocketState.Open)
        {
           string userMessage = Encoding.UTF8.GetString(buffer.Array, 0,
               result.Count);
           userMessage = "You sent: " + userMessage + " at " + 
               DateTime.Now.ToLongTimeString();
           buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));

           // Asynchronously send a message to the client
           await socket.SendAsync(buffer, WebSocketMessageType.Text,
               true, CancellationToken.None);
        }
        else { break; }
    }
}

Dukungan dalam .NET 4.5 untuk kata kunci tunggu dan operasi berbasis tugas asinkron sangat cocok untuk menulis aplikasi WebSockets. Contoh kode menunjukkan bahwa permintaan WebSockets berjalan sepenuhnya secara asinkron di dalam ASP.NET. Aplikasi menunggu secara asinkron agar pesan dikirim dari klien dengan memanggil soket tunggu. ReceiveAsync. Demikian pula, Anda dapat mengirim pesan asinkron ke klien dengan memanggil soket tunggu. SendAsync.

Di browser, aplikasi menerima pesan WebSockets melalui fungsi onmessage . Untuk mengirim pesan dari browser, Anda memanggil metode pengiriman jenis DOM WebSocket , seperti yang ditunjukkan dalam contoh ini:

// Receive a string message from the server.
socket.onmessage = function(msg)
{
    document.getElementById("serverData").innerHTML = msg.data; 
};
// Send a string message from the browser.
socket.send(document.getElementById("msgText"));

Di masa mendatang, kami mungkin merilis pembaruan untuk fungsionalitas ini yang mengabstraksi beberapa pengkodean tingkat rendah yang diperlukan dalam rilis ini untuk aplikasi WebSockets.

Bundling dan Minifikasi

Bundling memungkinkan Anda menggabungkan file JavaScript dan CSS individual ke dalam bundel yang dapat diperlakukan seperti satu file. Minifikasi mengembun file JavaScript dan CSS dengan menghapus spasi kosong dan karakter lain yang tidak diperlukan. Fitur-fitur ini berfungsi dengan Formulir Web, ASP.NET MVC, dan Halaman Web.

Bundel dibuat menggunakan kelas Bundel atau salah satu kelas turunannya, ScriptBundle dan StyleBundle. Setelah mengonfigurasi instans bundel, bundel tersedia untuk permintaan masuk hanya dengan menambahkannya ke instans BundleCollection global. Dalam templat default, konfigurasi bundel dilakukan dalam file BundleConfig. Konfigurasi default ini membuat bundel untuk semua skrip inti dan file css yang digunakan oleh templat.

Bundel dirujuk dari dalam tampilan dengan menggunakan salah satu dari beberapa metode pembantu yang mungkin. Untuk mendukung penyajian markup yang berbeda untuk bundel saat dalam mode debug vs. rilis, kelas ScriptBundle dan StyleBundle memiliki metode pembantu, Render. Saat dalam mode debug, Render akan menghasilkan markup untuk setiap sumber daya dalam bundel. Saat dalam mode rilis, Render akan menghasilkan elemen markup tunggal untuk seluruh bundel. Beralih antara mode debug dan rilis dapat dicapai dengan memodifikasi atribut debug elemen kompilasi di web.config seperti yang ditunjukkan di bawah ini:

<system.web>
 <compilation targetframework="4.5" debug="true" />
 ...</system.web>

Selain itu, mengaktifkan atau menonaktifkan pengoptimalan dapat diatur langsung melalui properti BundleTable.EnableOptimizations.

BundleTable.EnableOptimizations = true;

Ketika file dibundel, file pertama-tama diurutkan menurut abjad (cara file ditampilkan dalam Penjelajah Solusi). Mereka kemudian diatur sehingga pustaka yang diketahui dan ekstensi kustomnya (seperti jQuery, MooTools, dan Dojo) dimuat terlebih dahulu. Misalnya, urutan akhir untuk bundel folder Skrip seperti yang ditunjukkan di atas adalah:

  1. jquery-1.6.2.js
  2. jquery-ui.js
  3. jquery.tools.js
  4. a.js

File CSS juga diurutkan menurut abjad lalu diatur ulang sehingga reset.css dan normalize.css datang sebelum file lain. Penyortiran akhir bundling folder Styles yang ditunjukkan di atas adalah ini:

  1. reset.css
  2. content.css
  3. forms.css
  4. globals.css
  5. menu.css
  6. styles.css

Peningkatan Performa untuk Web Hosting

.NET Framework 4.5 dan Windows 8 memperkenalkan fitur yang dapat membantu Anda mencapai peningkatan performa yang signifikan untuk beban kerja server web. Ini termasuk pengurangan (hingga 35%) dalam waktu mulai dan jejak memori situs hosting web yang menggunakan ASP.NET.

Faktor performa utama

Idealnya, semua situs web harus aktif dan dalam memori untuk memastikan respons cepat terhadap permintaan berikutnya, setiap kali datang. Faktor-faktor yang dapat memengaruhi respons situs meliputi:

  • Waktu yang diperlukan situs untuk memulai ulang setelah kumpulan aplikasi didaur ulang. Ini adalah waktu yang diperlukan untuk meluncurkan proses server web untuk situs ketika rakitan situs tidak lagi dalam memori. (Rakitan platform masih dalam memori, karena digunakan oleh situs lain.) Situasi ini disebut sebagai "situs dingin, startup kerangka kerja yang hangat" atau hanya "startup situs dingin."
  • Berapa banyak memori yang diduduki situs. Istilah untuk ini adalah "konsumsi memori per situs" atau "set kerja yang tidak dibagikan."

Peningkatan performa baru berfokus pada kedua faktor ini.

Persyaratan untuk Fitur Performa Baru

Persyaratan untuk fitur baru dapat dipecah ke dalam kategori ini:

  • Penyempurnaan yang berjalan pada .NET Framework 4.
  • Peningkatan yang memerlukan .NET Framework 4.5 tetapi dapat berjalan pada versi Windows apa pun.
  • Peningkatan yang hanya tersedia dengan .NET Framework 4.5 yang berjalan di Windows 8.

Performa meningkat dengan setiap tingkat peningkatan yang dapat Anda aktifkan.

Beberapa peningkatan .NET Framework 4.5 memanfaatkan fitur performa yang lebih luas yang juga berlaku untuk skenario lain.

Berbagi Rakitan Umum

Persyaratan: .NET Framework 4 dan Visual Studio 11 Developer Preview SDK

Situs yang berbeda di server sering menggunakan rakitan pembantu yang sama (misalnya, rakitan dari starter kit atau aplikasi sampel). Setiap situs memiliki salinan rakitan ini sendiri di direktori Bin-nya. Meskipun kode objek untuk rakitan identik, mereka secara fisik memisahkan rakitan, sehingga setiap rakitan harus dibaca secara terpisah selama startup situs dingin dan disimpan secara terpisah dalam memori.

Fungsionalitas interning baru memecahkan inefisiensi ini dan mengurangi persyaratan RAM dan waktu muat. Interning memungkinkan Windows menyimpan satu salinan setiap rakitan dalam sistem file, dan rakitan individual di folder Bin situs diganti dengan tautan simbolis ke salinan tunggal. Jika situs individual memerlukan versi perakitan yang berbeda, tautan simbolis digantikan oleh versi baru rakitan, dan hanya situs yang terpengaruh.

Berbagi rakitan menggunakan tautan simbolis memerlukan alat baru bernama aspnet_intern.exe, yang memungkinkan Anda membuat dan mengelola penyimpanan rakitan magang. Ini disediakan sebagai bagian dari SDK Pratinjau Pengembang Visual Studio 11. (Namun, ini akan bekerja pada sistem yang hanya menginstal .NET Framework 4, dengan asumsi Anda telah menginstal pembaruan terbaru.)

Untuk memastikan semua rakitan yang memenuhi syarat telah diinternasi, Anda menjalankan aspnet_intern.exe secara berkala (misalnya, seminggu sekali sebagai tugas terjadwal). Penggunaan umumnya adalah sebagai berikut:

aspnet_intern -mode exec -sourcedir
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files" -interndir C:\ASPNETCommonAssemblies

Untuk melihat semua opsi, jalankan alat tanpa argumen.

Menggunakan kompilasi JIT multi-Core untuk startup yang lebih cepat

Persyaratan: .NET Framework 4.5

Untuk startup situs dingin, rakitan tidak hanya harus dibaca dari disk, tetapi situs harus dikompilasi JIT. Untuk situs yang kompleks, ini dapat menambahkan penundaan yang signifikan. Teknik tujuan umum baru dalam .NET Framework 4.5 mengurangi penundaan ini dengan menyebarkan kompilasi JIT di seluruh inti prosesor yang tersedia. Ini dilakukan sebanyak dan sedini mungkin dengan menggunakan informasi yang dikumpulkan selama peluncuran situs sebelumnya. Fungsionalitas ini diimplementasikan oleh metode System.Runtime.ProfileOptimization.StartProfile .

Kompilasi JIT menggunakan beberapa core diaktifkan secara default di ASP.NET, jadi Anda tidak perlu melakukan apa pun untuk memanfaatkan fitur ini. Jika Anda ingin menonaktifkan fitur ini, buat pengaturan berikut di file Web.config:

<configuration>
  <!-- ... -->
  <system.web>
<compilation profileGuidedOptimizations="None"  />
  <!-- ... -->

Menyetel pengumpulan sampah untuk mengoptimalkan memori

Persyaratan: .NET Framework 4.5

Setelah situs berjalan, penggunaan tumpukan pengumpul sampah (GC) dapat menjadi faktor signifikan dalam konsumsi memorinya. Seperti pengumpul sampah lainnya, .NET Framework GC membuat tradeoff antara waktu CPU (frekuensi dan signifikansi koleksi) dan konsumsi memori (ruang ekstra yang digunakan untuk objek baru, dibebaskan, atau dapat dibebaskan). Untuk rilis sebelumnya, kami telah memberikan panduan tentang cara mengonfigurasi GC untuk mencapai keseimbangan yang tepat (misalnya, lihat Konfigurasi Hosting Bersama ASP.NET 2.0/3.5).

Untuk .NET Framework 4.5, alih-alih beberapa pengaturan mandiri, pengaturan konfigurasi yang ditentukan beban kerja tersedia yang memungkinkan semua pengaturan GC yang direkomendasikan sebelumnya serta penyetelan baru yang memberikan performa tambahan untuk set kerja per situs.

Untuk mengaktifkan penyetelan memori GC, tambahkan pengaturan berikut ke file Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config:

<configuration>
  <!-- ... -->
  <runtime>
<performanceScenario value="HighDensityWebHosting"  />
  <!-- ... -->

(Jika Anda terbiasa dengan panduan sebelumnya untuk perubahan pada aspnet.config, perhatikan bahwa pengaturan ini menggantikan pengaturan lama — misalnya, tidak perlu mengatur gcServer, gcConcurrent, dll. Anda tidak perlu menghapus pengaturan lama.)

Prefetching untuk aplikasi web

Persyaratan: .NET Framework 4.5 yang berjalan di Windows 8

Untuk beberapa rilis, Windows telah menyertakan teknologi yang dikenal sebagai prefetcher yang mengurangi biaya baca disk startup aplikasi. Karena startup dingin adalah masalah yang sebagian besar untuk aplikasi klien, teknologi ini belum disertakan dalam Windows Server, yang hanya mencakup komponen yang penting untuk server. Prefetching sekarang tersedia dalam versi terbaru Windows Server, di mana ia dapat mengoptimalkan peluncuran masing-masing situs web.

Untuk Windows Server, prefetcher tidak diaktifkan secara default. Untuk mengaktifkan dan mengonfigurasi prefetcher untuk hosting web dengan kepadatan tinggi, jalankan sekumpulan perintah berikut di baris perintah:

sc config sysmain start=auto
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Prefetcher" /v MaxPrefetchFiles /t REG_DWORD /d 8192 /f
net start sysmain

Kemudian, untuk mengintegrasikan prefetcher dengan aplikasi ASP.NET, tambahkan yang berikut ini ke file Web.config:

<configuration>
  <!-- ... -->
  <system.web>
<compilation enablePrefetchOptimization="true" />
  <!-- ... -->

ASP.NET Web Form

Kontrol Data yang Sangat Diketik

Di ASP.NET 4.5, Formulir Web menyertakan beberapa penyempurnaan untuk bekerja dengan data. Peningkatan pertama adalah kontrol data yang sangat diketik. Untuk kontrol Formulir Web di versi ASP.NET sebelumnya, Anda menampilkan nilai terikat data menggunakan Eval dan ekspresi pengikatan data:

<ul>
<asp:Repeater runat="server" ID="customers">
       <ItemTemplate>
           <li>
               First Name: <%# Eval("FirstName")%><br />
               Last Name: <%# Eval("LastName")%><br />
           </li>
       </ItemTemplate>
</asp:Repeater>
</ul>

Untuk pengikatan data dua arah, Anda menggunakan Ikatan:

<asp:FormView runat="server" ID="editCustomer">
<EditItemTemplate>
       <div>
           <asp:Label runat="server" AssociatedControlID="firstName">
               First Name:</asp:Label>
           <asp:TextBox ID="firstName" runat="server"
               Text='<%#Bind("FirstName") %>' />
       </div>
       <div>
           <asp:Label runat="server" AssociatedControlID="lastName">
               First Name:</asp:Label>
           <asp:TextBox ID="lastName" runat="server"
               Text='<%#
Bind("LastName") %>' />
       </div>
       <asp:Button runat="server" CommandName="Update"/>
</EditItemTemplate>
</asp:FormView>

Pada waktu proses, panggilan ini menggunakan pantulan untuk membaca nilai anggota yang ditentukan lalu menampilkan hasilnya dalam markup. Pendekatan ini memudahkan untuk mengikat data terhadap data yang tidak dibentuk dan tidak dibentuk secara arbitrer.

Namun, ekspresi pengikatan data seperti ini tidak mendukung fitur seperti IntelliSense untuk nama anggota, navigasi (seperti Masuk Ke Definisi), atau pemeriksaan waktu kompilasi untuk nama-nama ini.

Untuk mengatasi masalah ini, ASP.NET 4.5 menambahkan kemampuan untuk mendeklarasikan jenis data data yang terikat dengan kontrol. Anda melakukan ini menggunakan properti ItemType baru. Saat Anda mengatur properti ini, dua variabel jenis baru tersedia dalam cakupan ekspresi pengikatan data: Item dan BindItem. Karena variabel sangat ditik, Anda mendapatkan manfaat penuh dari pengalaman pengembangan Visual Studio.

Untuk ekspresi pengikatan data dua arah, gunakan variabel BindItem :

<asp:FormView runat="server" ID="editCustomer">
<EditItemTemplate>
       <div>
           <asp:Label runat="server" AssociatedControlID="firstName">
               First Name:</asp:Label>
           <asp:TextBox ID="firstName" runat="server"  
               Text='<%#BindItem.FirstName %>' />
       </div>
       <div>
           <asp:Label runat="server" AssociatedControlID="lastName">
               First Name:</asp:Label>
           <asp:TextBox ID="lastName" runat="server" 
               Text='<%#BindItem.LastName %>' />
       </div>
       <asp:Button runat="server" CommandName="Update"/>
</EditItemTemplate>
</asp:FormView>

Sebagian besar kontrol dalam kerangka kerja ASP.NET Web Forms yang mendukung pengikatan data telah diperbarui untuk mendukung properti ItemType .

Pengikatan Model

Pengikatan model memperluas pengikatan data di kontrol ASP.NET Web Forms untuk bekerja dengan akses data yang berfokus pada kode. Ini menggabungkan konsep dari kontrol ObjectDataSource dan dari pengikatan model di ASP.NET MVC.

Memilih data

Untuk mengonfigurasi kontrol data untuk menggunakan pengikatan model untuk memilih data, Anda mengatur properti SelectMethod kontrol ke nama metode dalam kode halaman. Kontrol data memanggil metode pada waktu yang sesuai dalam siklus hidup halaman dan secara otomatis mengikat data yang dikembalikan. Tidak perlu secara eksplisit memanggil metode DataBind .

Dalam contoh berikut, kontrol GridView dikonfigurasi untuk menggunakan metode bernama GetCategories:

<asp:GridView ID="categoriesGrid"
runat="server"
ItemType="WebApplication1.Model.Category"
SelectMethod="GetCategories" AutoGenerateColumns="false">
<Columns>
       <asp:BoundField DataField="CategoryID" HeaderText="ID" />
       <asp:BoundField DataField="CategoryName" HeaderText="Name" />
       <asp:BoundField DataField="Description" HeaderText="Description" />
       <asp:TemplateField HeaderText="# of Products">
           <ItemTemplate><%# Item.Products.Count %></ItemTemplate>
       </asp:TemplateField>
</Columns>
</asp:GridView>

Anda membuat metode GetCategories di kode halaman. Untuk operasi pilih sederhana, metode tidak memerlukan parameter dan harus mengembalikan objek IEnumerable atau IQueryable . Jika properti ItemType baru diatur (yang memungkinkan ekspresi pengikatan data yang diketik dengan kuat, seperti yang dijelaskan di bawah Kontrol Data yang Diketik Dengan Kuat sebelumnya), versi generik antarmuka ini harus dikembalikan — IEnumerable<T> atau IQueryable<T>, dengan parameter T yang cocok dengan jenis properti ItemType (misalnya, Kategori> IQueryable).<

Contoh berikut menunjukkan kode untuk metode GetCategories . Contoh ini menggunakan model Entity Framework Code First dengan database sampel Northwind. Kode memastikan bahwa kueri mengembalikan detail produk terkait untuk setiap kategori dengan metode Sertakan . (Ini memastikan bahwa Elemen TemplateField dalam markup menampilkan jumlah produk di setiap kategori tanpa memerlukan n+1 pilih.)

public IQueryable<Category>
GetCategories()
{
    var db = new Northwind();
    return db.Categories.Include(c => c.Products);
}

Saat halaman berjalan, kontrol GridView memanggil metode GetCategories secara otomatis dan merender data yang dikembalikan menggunakan bidang yang dikonfigurasi:

Cuplikan layar yang memperlihatkan Tampilan Kisi dari daftar makanan menurut kategori. Ada delapan kategori makanan.

Karena metode pilih mengembalikan objek IQueryable , kontrol GridView dapat memanipulasi kueri lebih lanjut sebelum menjalankannya. Misalnya, kontrol GridView dapat menambahkan ekspresi kueri untuk pengurutan dan penomoran halaman ke objek IQueryable yang dikembalikan sebelum dijalankan, sehingga operasi tersebut dilakukan oleh penyedia LINQ yang mendasar. Dalam hal ini, Entity Framework akan memastikan operasi tersebut dilakukan dalam database.

Contoh berikut menunjukkan kontrol GridView yang dimodifikasi untuk memungkinkan pengurutan dan penomoran halaman:

<asp:GridView ID="categoriesGrid"
runat="server"
AutoGenerateColumns="false"
AllowSorting="true" AllowPaging="true" PageSize="5"
ItemType="WebApplication1.Model.Category" DataKeyNames="CategoryID"
SelectMethod="GetCategories"
UpdateMethod="UpdateCategory">
<Columns>
       <asp:BoundField DataField="CategoryID" HeaderText="ID" SortExpression="CategoryID" />
       <asp:BoundField DataField="CategoryName" HeaderText="Name" SortExpression="CategoryName" />
       <asp:BoundField DataField="Description" HeaderText="Description" />
       <asp:TemplateField HeaderText="# of Products">
           <ItemTemplate><%# Item.Products.Count %></ItemTemplate>
       </asp:TemplateField>
</Columns>
<EmptyDataTemplate>No categories found with a product count of 
      <%# minProductsCount.SelectedValue %></EmptyDataTemplate>
</asp:GridView>

Sekarang ketika halaman berjalan, kontrol dapat memastikan bahwa hanya halaman data saat ini yang ditampilkan dan diurutkan menurut kolom yang dipilih:

Cuplikan layar yang memperlihatkan Tampilan Kisi dari daftar makanan menurut kategori. Ada tiga kategori, Confections, Condiments dan Beverages.

Untuk memfilter data yang dikembalikan, parameter harus ditambahkan ke metode pilih. Parameter ini akan diisi oleh pengikatan model pada waktu proses, dan Anda dapat menggunakannya untuk mengubah kueri sebelum mengembalikan data.

Misalnya, asumsikan bahwa Anda ingin mengizinkan pengguna memfilter produk dengan memasukkan kata kunci dalam string kueri. Anda dapat menambahkan parameter ke metode dan memperbarui kode untuk menggunakan nilai parameter:

public IQueryable<Product>
GetProducts(string keyword)
{
    IQueryable<Product> query = _db.Products;
     
    if (!String.IsNullOrWhiteSpace(keyword))
    {
        query = query.Where(p => p.ProductName.Contains(keyword));
    }
    return query;
}

Kode ini menyertakan ekspresi Where jika nilai disediakan untuk kata kunci lalu mengembalikan hasil kueri.

Penyedia nilai

Contoh sebelumnya tidak spesifik tentang dari mana nilai untuk parameter kata kunci berasal. Untuk menunjukkan informasi ini, Anda dapat menggunakan atribut parameter. Untuk contoh ini, Anda dapat menggunakan kelas QueryStringAttribute yang ada di namespace Layanan System.Web.ModelBinding :

public IQueryable<Product>
GetProducts([QueryString]string keyword)
{
    IQueryable<Product> query = _db.Products;
     
    if (!String.IsNullOrWhiteSpace(keyword))
    {
        query = query.Where(p => p.ProductName.Contains(keyword));
    }
    return query;
}

Ini menginstruksikan pengikatan model untuk mencoba mengikat nilai dari string kueri ke parameter kata kunci pada waktu proses. (Ini mungkin melibatkan melakukan konversi jenis, meskipun tidak dalam kasus ini.) Jika nilai tidak dapat disediakan dan jenisnya tidak dapat diubah ke null, pengecualian akan dilemparkan.

Sumber nilai untuk metode ini disebut sebagai penyedia nilai, dan atribut parameter yang menunjukkan penyedia nilai mana yang akan digunakan disebut sebagai atribut penyedia nilai. Formulir Web akan menyertakan penyedia nilai dan atribut yang sesuai untuk semua sumber input pengguna yang khas dalam aplikasi Formulir Web, seperti string kueri, cookie, nilai formulir, kontrol, status tampilan, status sesi, dan properti profil. Anda juga dapat menulis penyedia nilai kustom.

Secara default, nama parameter digunakan sebagai kunci untuk menemukan nilai dalam koleksi penyedia nilai. Dalam contoh, kode akan mencari nilai string kueri bernama kata kunci (misalnya, ~/default.aspx?keyword=chef). Anda dapat menentukan kunci kustom dengan meneruskannya sebagai argumen ke atribut parameter. Misalnya, untuk menggunakan nilai variabel query-string bernama q, Anda dapat melakukan ini:

public IQueryable<Product>
GetProducts([QueryString("q")]string keyword)
{
    IQueryable<Product> query = _db.Products;

    if (!String.IsNullOrWhiteSpace(keyword))
    {
       query = query.Where(p => p.ProductName.Contains(keyword));
    }
    return query;
}

Jika metode ini berada dalam kode halaman, pengguna dapat memfilter hasil dengan meneruskan kata kunci menggunakan string kueri:

Cuplikan layar yang memperlihatkan browser di halaman Aplikasi My A S P dot Net. Ada dua variabel yang tercantum untuk makanan Cajun.

Pengikatan model menyelesaikan banyak tugas yang harus Anda kodekan dengan tangan: membaca nilai, memeriksa nilai null, mencoba mengonversinya ke jenis yang sesuai, memeriksa apakah konversi berhasil, dan akhirnya, menggunakan nilai dalam kueri. Pengikatan model menghasilkan kode yang jauh lebih sedikit dan dalam kemampuan untuk menggunakan kembali fungsionalitas di seluruh aplikasi Anda.

Pemfilteran menurut nilai dari kontrol

Misalkan Anda ingin memperluas contoh untuk memungkinkan pengguna memilih nilai filter dari daftar drop-down. Tambahkan daftar drop-down berikut ke markup dan konfigurasikan untuk mendapatkan datanya dari metode lain menggunakan properti SelectMethod :

<asp:Label runat="server" AssociatedControlID="categories"
Text="Select a category to show products for: " />
<asp:DropDownList runat="server" ID="categories"
SelectMethod="GetCategories" AppendDataBoundItems="true"
DataTextField="CategoryName" DataValueField="CategoryID"
AutoPostBack="true">
  <asp:ListItem Value="" Text="- all -" />
</asp:DropDownList>

Biasanya Anda juga akan menambahkan elemen EmptyDataTemplate ke kontrol GridView sehingga kontrol akan menampilkan pesan jika tidak ada produk yang cocok yang ditemukan:

<asp:GridView ID="productsGrid"
runat="server" DataKeyNames="ProductID"
AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false"
SelectMethod="GetProducts" >
<Columns>
       <asp:BoundField DataField="ProductID" HeaderText="ID" />
       <asp:BoundField DataField="ProductName" HeaderText="Name"				  
            SortExpression="ProductName" />
       <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" 
            SortExpression="UnitPrice" />
       <asp:BoundField DataField="UnitsInStock" HeaderText="# in Stock" 
            SortExpression="UnitsInStock" />
</Columns>
<EmptyDataTemplate>
        No products matching the filter criteria were found</EmptyDataTemplate>
</asp:GridView>

Di kode halaman, tambahkan metode pilih baru untuk daftar drop-down:

public IQueryable<Category>
GetCategories()
{
    return _db.Categories;
}

Terakhir, perbarui metode pilih GetProducts untuk mengambil parameter baru yang berisi ID kategori yang dipilih dari daftar drop-down:

public IQueryable<Product>
GetProducts(
[QueryString("q")] string keyword,
[Control("categories")] int? categoryId)
{
    IQueryable<Product> query = _db.Products;
     
    if (!String.IsNullOrWhiteSpace(keyword))
    {
        query = query.Where(p => p.ProductName.Contains(keyword));
    }
    if (categoryId.HasValue && categoryId > 0)
    {
        query = query.Where(p => p.CategoryID == categoryId);
    }
    return query;
}

Sekarang ketika halaman berjalan, pengguna dapat memilih kategori dari daftar drop-down, dan kontrol GridView secara otomatis terikat ulang untuk menampilkan data yang difilter. Ini dimungkinkan karena pengikatan model melacak nilai parameter untuk metode tertentu dan mendeteksi apakah nilai parameter telah berubah setelah postback. Jika demikian, pengikatan model memaksa kontrol data terkait untuk mengikat kembali data.

Cuplikan layar yang memperlihatkan tampilan kisi daftar konfeksi menurut I D, nama, harga satuan, dan angka dalam stok.

Ekspresi Pengikatan Data Berkode HTML

Sekarang Anda dapat mengodekan HTML hasil ekspresi pengikatan data. Tambahkan titik dua (:) ke akhir awalan <%# yang menandai ekspresi pengikatan data:

<asp:TemplateField HeaderText="Name">
<ItemTemplate><%#: Item.Products.Name %></ItemTemplate>
</asp:TemplateField>

Validasi Tidak Mengganggu

Anda sekarang dapat mengonfigurasi kontrol validator bawaan untuk menggunakan JavaScript yang tidak mengganggu untuk logika validasi sisi klien. Ini secara signifikan mengurangi jumlah JavaScript yang dirender sebaris dalam markup halaman dan mengurangi ukuran halaman keseluruhan. Anda dapat mengonfigurasi JavaScript yang tidak mengganggu untuk kontrol validator dengan salah satu cara berikut:

  • Secara global dengan menambahkan pengaturan berikut ke <elemen appSettings> dalam file Web.config:

    <add name="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
    
  • Secara global dengan mengatur properti System.Web.UI.ValidationSettings.UnobtrusiveValidationMode statis ke UnobtrusiveValidationMode.WebForms (biasanya dalam metode Application_Start dalam file Global.asax).

  • Satu per satu untuk halaman dengan mengatur properti UnobtrusiveValidationMode baru dari kelas Halaman ke UnobtrusiveValidationMode.WebForms.

Pembaruan HTML5

Beberapa penyempurnaan telah dilakukan pada kontrol server Formulir Web untuk memanfaatkan fitur baru HTML5:

  • Properti TextMode kontrol TextBox telah diperbarui untuk mendukung jenis input HTML5 baru seperti email, tanggalwaktu, dan sebagainya.
  • Kontrol FileUpload sekarang mendukung beberapa unggahan file dari browser yang mendukung fitur HTML5 ini.
  • Kontrol validator sekarang mendukung validasi elemen input HTML5.
  • Elemen HTML5 baru yang memiliki atribut yang mewakili URL sekarang mendukung runat="server". Akibatnya, Anda dapat menggunakan konvensi ASP.NET di jalur URL, seperti operator ~ untuk mewakili akar aplikasi (misalnya, <video runat="server" src="~/myVideo.wmv" />).
  • Kontrol UpdatePanel telah diperbaiki untuk mendukung posting bidang input HTML5.

ASP.NET MVC 4

ASP.NET MVC 4 Beta sekarang disertakan dengan Visual Studio 11 Beta. ASP.NET MVC adalah kerangka kerja untuk mengembangkan aplikasi Web yang sangat dapat diuji dan dapat dipertahankan dengan memanfaatkan pola Model-View-Controller (MVC). ASP.NET MVC 4 memudahkan untuk membangun aplikasi untuk Web seluler dan menyertakan ASP.NET Web API, yang membantu Anda membangun layanan HTTP yang dapat menjangkau perangkat apa pun. Untuk informasi selengkapnya, lihat Catatan Rilis ASP.NET MVC 4.

ASP.NET Halaman Web 2

Fitur baru meliputi yang berikut ini:

  • Templat situs baru dan yang diperbarui.
  • Menambahkan validasi sisi server dan sisi klien menggunakan pembantu Validasi .
  • Kemampuan untuk mendaftarkan skrip menggunakan manajer aset.
  • Mengaktifkan login dari Facebook dan situs lain menggunakan OAuth dan OpenID.
  • Menambahkan peta menggunakan pembantu Maps .
  • Menjalankan aplikasi Halaman Web secara berdampingan.
  • Halaman penyajian untuk perangkat seluler.

Untuk informasi selengkapnya tentang fitur ini dan contoh kode halaman lengkap, lihat Fitur Teratas di Halaman Web 2 Beta.

Visual Web Developer 11 Beta

Bagian ini menyediakan informasi tentang peningkatan untuk pengembangan web di Visual Web Developer 11 Beta dan Kandidat Rilis Visual Studio 2012.

Berbagi Proyek Antara Visual Studio 2010 dan Kandidat Rilis Visual Studio 2012 (Kompatibilitas Proyek)

Hingga Kandidat Rilis Visual Studio 2012, membuka proyek yang ada di versi Visual Studio yang lebih baru meluncurkan Wizard Konversi. Ini memaksa peningkatan konten (aset) proyek dan solusi untuk format baru yang tidak kompatibel mundur. Oleh karena itu, setelah konversi, Anda tidak dapat membuka proyek di versi Visual Studio yang lebih lama.

Banyak pelanggan telah memberi tahu kami bahwa ini bukan pendekatan yang tepat. Di Visual Studio 11 Beta, kami sekarang mendukung berbagi proyek dan solusi dengan Visual Studio 2010 SP1. Ini berarti bahwa jika Anda membuka proyek 2010 di Kandidat Rilis Visual Studio 2012, Anda masih akan dapat membuka proyek di Visual Studio 2010 SP1.

Catatan

Beberapa jenis proyek tidak dapat dibagikan antara Visual Studio 2010 SP1 dan Kandidat Rilis Visual Studio 2012. Ini termasuk beberapa proyek lama (seperti proyek ASP.NET MVC 2) atau proyek untuk tujuan khusus (seperti proyek Penyiapan).

Saat Anda membuka proyek Web Visual Studio 2010 SP1 untuk pertama kalinya di Visual Studio 11 Beta, properti berikut ditambahkan ke file proyek:

  • FileUpgradeFlags
  • UpgradeBackupLocation
  • OldToolsVersion
  • VisualStudioVersion
  • VSToolsPath

FileUpgradeFlags, UpgradeBackupLocation, dan OldToolsVersion digunakan oleh proses yang meningkatkan file proyek. Mereka tidak berdampak pada bekerja dengan proyek di Visual Studio 2010.

VisualStudioVersion adalah properti baru yang digunakan oleh MSBuild 4.5 yang menunjukkan versi Visual Studio untuk proyek saat ini. Karena properti ini tidak ada di MSBuild 4.0 (versi MSBuild yang digunakan Visual Studio 2010 SP1), kami memasukkan nilai default ke dalam file proyek.

Properti VSToolsPath digunakan untuk menentukan file .targets yang benar untuk diimpor dari jalur yang diwakili oleh pengaturan MSBuildExtensionsPath32.

Ada juga beberapa perubahan yang terkait dengan elemen Impor. Perubahan ini diperlukan untuk mendukung kompatibilitas antara kedua versi Visual Studio.

Catatan

Jika proyek dibagikan antara Visual Studio 2010 SP1 dan Visual Studio 11 Beta di dua komputer yang berbeda, dan jika proyek menyertakan database lokal di folder App_Data, Anda harus memastikan bahwa versi SQL Server yang digunakan oleh database diinstal di kedua komputer.

Perubahan Konfigurasi dalam Templat Situs Web ASP.NET 4.5

Perubahan berikut telah dilakukan pada file Web.config default untuk situs yang dibuat menggunakan templat situs web di Kandidat Rilis Visual Studio 2012:

  • <httpRuntime> Dalam elemen , encoderType atribut sekarang diatur secara default untuk menggunakan jenis AntiXSS yang ditambahkan ke ASP.NET. Untuk detailnya, lihat Pustaka AntiXSS.
  • Juga dalam <httpRuntime> elemen , requestValidationMode atribut diatur ke "4.5". Ini berarti bahwa secara default, validasi permintaan dikonfigurasi untuk menggunakan validasi yang ditangguhkan ("malas"). Untuk detailnya, lihat Fitur Validasi Permintaan ASP.NET Baru.
  • Elemen <modules> bagian <system.webServer> tidak berisi runAllManagedModulesForAllRequests atribut. (Nilai defaultnya adalah false.) Ini berarti bahwa jika Anda menggunakan versi IIS 7 yang belum diperbarui ke SP1, Anda mungkin mengalami masalah dengan perutean di situs baru. Untuk informasi selengkapnya, lihat Dukungan Asli di IIS 7 untuk perutean ASP.NET.

Perubahan ini tidak memengaruhi aplikasi yang ada. Namun, mereka mungkin mewakili perbedaan perilaku antara situs web yang ada dan situs web baru yang Anda buat untuk ASP.NET 4.5 menggunakan templat baru.

Dukungan Asli di IIS 7 untuk Perutean ASP.NET

Ini bukan perubahan pada ASP.NET seperti itu, tetapi perubahan templat untuk proyek situs web baru yang dapat memengaruhi Anda jika Anda bekerja versi IIS 7 yang belum menerapkan pembaruan SP1.

Di ASP.NET, Anda dapat menambahkan pengaturan konfigurasi berikut ke aplikasi untuk mendukung perutean:

<configuration>
  <system.webServer>
<modules runAllManagedModulesForAllRequests="true">
     <!-- more -->
</modules>
  </system.webServer>
</configuration>

Ketika runAllManagedModulesForAllRequests benar, URL seperti http://mysite/myapp/home masuk ke ASP.NET, meskipun tidak ada ekstensi .aspx, .mvc, atau serupa di URL.

Pembaruan yang dibuat ke IIS 7 membuat pengaturan runAllManagedModulesForAllRequests tidak perlu dan mendukung perutean ASP.NET secara asli. (Untuk informasi tentang pembaruan, lihat artikel Dukungan MicrosoftPembaruan tersedia yang memungkinkan penangan IIS 7.0 atau IIS 7.5 tertentu untuk menangani permintaan yang URL-nya tidak diakhapi dengan titik.)

Jika situs web Anda berjalan di IIS 7 dan jika IIS telah diperbarui, Anda tidak perlu mengatur runAllManagedModulesForAllRequests ke true. Bahkan, mengaturnya ke true tidak disarankan, karena menambahkan overhead pemrosesan yang tidak perlu untuk diminta. Ketika pengaturan ini benar, semua permintaan, termasuk permintaan untuk .htm, .jpg, dan file statis lainnya, juga melalui alur permintaan ASP.NET.

Jika Anda membuat situs web ASP.NET 4.5 baru menggunakan templat yang disediakan di Visual Studio 2012 RC, konfigurasi untuk situs web tidak menyertakan pengaturan runAllManagedModulesForAllRequests . Ini berarti bahwa secara default pengaturan adalah false.

Jika Anda kemudian menjalankan situs web di Windows 7 tanpa SP1 terinstal, IIS 7 tidak akan menyertakan pembaruan yang diperlukan. Sebagai konsekuensinya, perutean tidak akan berfungsi dan Anda akan melihat kesalahan. Jika Anda memiliki masalah di mana perutean tidak berfungsi, Anda bisa melakukan hal berikut:

  • Perbarui Windows 7 ke SP1, yang akan menambahkan pembaruan ke IIS 7.
  • Instal pembaruan yang dijelaskan dalam artikel Dukungan Microsoft yang tercantum sebelumnya.
  • Atur runAllManagedModulesForAllRequests ke true dalam file Web.config situs web tersebut. Perhatikan bahwa ini akan menambahkan beberapa overhead ke permintaan.

HTML Editor

Tugas Cerdas

Dalam tampilan Desain, properti kompleks kontrol server sering memiliki kotak dialog dan wizard terkait untuk memudahkan mengaturnya. Misalnya, Anda dapat menggunakan kotak dialog khusus untuk menambahkan sumber data ke kontrol Pengulang atau menambahkan kolom ke kontrol GridView .

Namun, jenis bantuan UI untuk properti kompleks ini belum tersedia dalam tampilan Sumber. Oleh karena itu, Visual Studio 11 memperkenalkan Tugas Cerdas untuk tampilan Sumber. Tugas Cerdas adalah pintasan sadar konteks untuk fitur yang umum digunakan di editor C# dan Visual Basic.

Untuk kontrol ASP.NET Web Forms, Tugas Cerdas muncul di tag server sebagai glyph kecil saat titik penyisipan berada di dalam elemen:

Cuplikan layar yang memperlihatkan tag server sebagai glyph kecil saat titik penyisipan berada di dalam elemen .

Tugas Cerdas meluas saat Anda mengklik glyph atau tekan CTRL+. (titik), sama seperti di editor kode. Kemudian menampilkan pintasan yang mirip dengan Tugas Cerdas dalam tampilan Desain.

Cuplikan layar yang memperlihatkan jendela Tugas Tampilan Kisi.

Misalnya, Tugas Cerdas dalam ilustrasi sebelumnya memperlihatkan opsi Tugas GridView. Jika Anda memilih Edit Kolom, kotak dialog berikut ditampilkan:

Cuplikan layar yang memperlihatkan dialog Bidang.

Mengisi kotak dialog mengatur properti yang sama yang bisa Anda atur dalam tampilan Desain. Saat Anda mengklik OK, markup untuk kontrol diperbarui dengan pengaturan baru:

Cuplikan layar yang memperlihatkan markup untuk kontrol yang diperbarui dengan pengaturan baru.

Dukungan WAI-ARIA

Menulis situs web yang dapat diakses menjadi semakin penting. Standar aksesibilitas WAI-ARIA mendefinisikan bagaimana pengembang harus menulis situs web yang dapat diakses. Standar ini sekarang didukung penuh di Visual Studio.

Misalnya, atribut peran sekarang memiliki IntelliSense penuh:

Cuplikan layar yang memperlihatkan item menu disorot dalam daftar sebagai atribut Peran.

Standar WAI-ARIA juga memperkenalkan atribut yang diawali dengan aria- yang memungkinkan Anda menambahkan semantik ke dokumen HTML5. Visual Studio juga sepenuhnya mendukung atribut aria ini:

Cuplikan layar yang memperlihatkan atribut aria. Efek penurunan Aria dipilih dalam daftar atribut. Cuplikan layar yang memperlihatkan atribut efek penurunan aria dengan salinan dipilih.

Cuplikan HTML5 baru

Untuk membuatnya lebih cepat dan lebih mudah untuk menulis markup HTML5 yang umum digunakan, Visual Studio menyertakan sejumlah cuplikan. Contohnya adalah cuplikan video:

Cuplikan layar yang memperlihatkan cuplikan video Visual Studio dipilih.

Untuk memanggil cuplikan, tekan Tab dua kali saat elemen dipilih di IntelliSense:

Cuplikan layar yang memperlihatkan file elemen yang dipilih di IntelliSense.

Ini menghasilkan cuplikan yang dapat Anda sesuaikan.

Ekstrak ke kontrol pengguna

Di halaman web besar, ada baiknya untuk memindahkan masing-masing bagian ke dalam kontrol pengguna. Bentuk pemfaktoran ulang ini dapat membantu meningkatkan keterbacaan halaman dan dapat menyederhanakan struktur halaman.

Untuk mempermudah ini, saat Anda mengedit halaman Formulir Web di tampilan Sumber, Anda sekarang dapat memilih teks di halaman, klik kanan, lalu pilih Ekstrak ke Kontrol Pengguna:

Cuplikan layar yang memperlihatkan Ekstrak ke Kontrol Pengguna dipilih di menu konteks.

IntelliSense untuk nugget kode dalam atribut

Visual Studio selalu menyediakan IntelliSense untuk nugget kode sisi server di halaman atau kontrol apa pun. Sekarang Visual Studio menyertakan IntelliSense untuk nugget kode dalam atribut HTML juga.

Cuplikan layar yang memperlihatkan String Kueri dipilih dalam daftar.

Ini memudahkan untuk membuat ekspresi pengikatan data:

Cuplikan layar yang memperlihatkan Enkode String Skrip Java dipilih.

Penggantian nama otomatis tag yang cocok saat Anda mengganti nama tag pembuka atau penutup

Jika Anda mengganti nama elemen HTML (misalnya, Anda mengubah tag div menjadi tag header ), tag pembuka atau penutup yang sesuai juga berubah secara real time.

Cuplikan layar yang memperlihatkan tag pembuka dan penutupan berubah secara real time. Kata Heade disorot.

Ini membantu menghindari kesalahan di mana Anda lupa mengubah tag penutup atau mengubah tag yang salah.

Pembuatan penanganan aktivitas

Visual Studio sekarang menyertakan fitur dalam tampilan Sumber untuk membantu Anda menulis penanganan aktivitas dan mengikatnya secara manual. Jika Anda mengedit nama peristiwa dalam tampilan Sumber, IntelliSense menampilkan <Buat Peristiwa> Baru, yang akan membuat penanganan aktivitas di kode halaman yang memiliki tanda tangan yang tepat:

Cuplikan layar yang memperlihatkan Buat Peristiwa Baru di titik penyisipan di Tampilan Sumber.

Secara default, penanganan aktivitas akan menggunakan ID kontrol untuk nama metode penanganan peristiwa:

Cuplikan layar yang memperlihatkan I D kontrol untuk nama metode penanganan peristiwa.

Penanganan aktivitas yang dihasilkan akan terlihat seperti ini (dalam hal ini, dalam C#):

Cuplikan layar yang memperlihatkan penanganan aktivitas yang dihasilkan dalam C sharp.

Inden pintar

Saat Anda menekan Enter saat berada di dalam elemen HTML kosong, editor akan menempatkan titik penyisipan di tempat yang tepat:

Cuplikan layar yang memperlihatkan titik penyisipan antara dua elemen H T M L.

Jika Anda menekan Enter di lokasi ini, tag penutup dipindahkan ke bawah dan diinden agar sesuai dengan tag pembuka. Titik penyisipan juga diindentasi:

Cuplikan layar yang memperlihatkan tag penutup dipindahkan ke bawah dan diindentasi agar sesuai dengan tag pembuka. Titik penyisipan juga diindentasi.

Penyelesaian pernyataan pengurangan otomatis

Daftar IntelliSense di Visual Studio sekarang memfilter berdasarkan apa yang Anda ketik sehingga hanya menampilkan opsi yang relevan:

Cuplikan layar yang memperlihatkan peta kata dipilih dalam daftar IntelliSense.

IntelliSense juga memfilter berdasarkan kasus judul kata individual dalam daftar IntelliSense. Misalnya, jika Anda mengetik "dl", dl dan asp:DataList ditampilkan:

Cuplikan layar yang memperlihatkan d l dipilih karena dititik.

Fitur ini membuatnya lebih cepat untuk mendapatkan penyelesaian pernyataan untuk elemen yang diketahui.

JavaScript Editor

Editor JavaScript di Visual Studio 2012 Release Candidate benar-benar baru dan sangat meningkatkan pengalaman bekerja dengan JavaScript di Visual Studio.

Kerangka kode

Wilayah kerangka sekarang secara otomatis dibuat untuk semua fungsi, memungkinkan Anda untuk menciutkan bagian file yang tidak berkaitan dengan fokus Anda saat ini.

Pencocokan kurung kurawal

Saat Anda meletakkan titik penyisipan pada kurung kurawal buka atau tutup, editor menyoroti yang cocok.

Pergi ke Definisi

Perintah Buka Definisi memungkinkan Anda melompat ke sumber untuk fungsi atau variabel.

Dukungan ECMAScript5

Editor mendukung sintaks dan API baru di ECMAScript5, versi terbaru dari standar yang menjelaskan bahasa JavaScript.

DOM IntelliSense

IntelliSense untuk API DOM telah ditingkatkan, dengan dukungan untuk banyak API HTML5 baru termasuk querySelector, DOM Storage, pesan lintas dokumen, dan kanvas. DOM IntelliSense sekarang didorong oleh satu file JavaScript sederhana, bukan oleh definisi pustaka jenis asli. Ini memudahkan untuk memperpanjang atau mengganti.

Kelebihan beban tanda tangan VSDOC

Komentar IntelliSense terperinci sekarang dapat dinyatakan untuk kelebihan beban terpisah fungsi JavaScript dengan menggunakan elemen tanda tangan> baru<, seperti yang ditunjukkan dalam contoh ini:

function GetOrSet(key, value) {
/// <signature>
///	 <summary>Gets the value</summary>
///	 <param name="key" type="String">The key to get the value for</param>
///	 <returns type="String" />
/// </signature>
/// <signature>
///	 <summary>Sets the value</summary>
///	 <param name="key" type="String">The key to set the value for</param>
///	 <param name="value" type="String">The value to set</param>
///	 <returns type="MyLib" />
/// </signature>
    if (value) {
        values[key] = value;
        return this;
    } else {
        return values[key];
    }
}

Referensi implisit

Anda sekarang dapat menambahkan file JavaScript ke daftar pusat yang akan secara implisit disertakan dalam daftar file yang diberikan file JavaScript atau referensi blok, yang berarti Anda akan mendapatkan IntelliSense untuk kontennya. Misalnya, Anda dapat menambahkan file jQuery ke daftar pusat file, dan Anda akan mendapatkan IntelliSense untuk fungsi jQuery di blok file JavaScript apa pun, apakah Anda telah mereferensikannya secara eksplisit (menggunakan /// <referensi />) atau tidak.

CSS Editor

Penyelesaian pernyataan pengurangan otomatis

Daftar IntelliSense untuk CSS sekarang memfilter berdasarkan properti dan nilai CSS yang didukung oleh skema yang dipilih.

Cuplikan layar yang memperlihatkan radius batas dipilih dalam daftar IntelliSense untuk C S S saat radiu ditik.

IntelliSense juga mendukung pencarian kasus judul:

Cuplikan layar memperlihatkan bobot font dipilih setelah f w.

Indentasi hierarkis

Editor CSS menggunakan indentasi untuk menampilkan aturan hierarkis, yang memberi Anda gambaran umum tentang bagaimana aturan berjenjang diatur secara logis. Dalam contoh berikut, #list pemilih adalah turunan berkala dari daftar dan karenanya diindentasi.

Cuplikan layar yang memperlihatkan contoh daftar yang diindentasi.

Contoh berikut menunjukkan pewarisan yang lebih kompleks:

Cuplikan layar yang memperlihatkan daftar variabel tambahan.

Indentasi aturan ditentukan oleh aturan induknya. Indentasi hierarki diaktifkan secara default, tetapi Anda dapat menonaktifkannya kotak dialog Opsi (Alat, Opsi dari bilah menu):

Cuplikan layar yang memperlihatkan dialog Opsi. Indentasi hierarkis dicentang.

Dukungan peretasan CSS

Analisis ratusan file CSS dunia nyata menunjukkan bahwa peretasan CSS sangat umum, dan sekarang Visual Studio mendukung yang paling banyak digunakan. Dukungan ini mencakup IntelliSense dan validasi peretasan properti bintang (*) dan garis bawah (_):

Cuplikan layar yang memperlihatkan tinggi dipilih dalam daftar.

Peretasan pemilih umum juga didukung sehingga indentasi hierarkis dipertahankan bahkan ketika diterapkan. Peretasan pemilih umum yang digunakan untuk menargetkan Internet Explorer 7 adalah menambahkan pemilih dengan *:first-child + html. Menggunakan aturan tersebut akan mempertahankan indentasi hierarkis:

Cuplikan layar yang memperlihatkan contoh peretasan pemilih umum.

Skema khusus vendor (-moz-, -webkit)

CSS3 memperkenalkan banyak properti yang telah diimplementasikan oleh browser yang berbeda pada waktu yang berbeda. Ini sebelumnya memaksa pengembang untuk membuat kode untuk browser tertentu dengan menggunakan sintaks khusus vendor. Properti khusus browser ini sekarang disertakan dalam IntelliSense.

Cuplikan layar yang memperlihatkan bungkus kata m s dipilih di IntelliSense.

Mengomentari dan membatalkan komentar dukungan

Sekarang Anda dapat mengomentari dan membatalkan komentar aturan CSS menggunakan pintasan yang sama dengan yang Anda gunakan di editor kode (Ctrl+K,C untuk mengomentari dan Ctrl+K,Anda untuk membatalkan komentar).

Pemilih warna

Di versi Visual Studio sebelumnya, IntelliSense untuk atribut terkait warna terdiri dari daftar drop-down nilai warna bernama. Daftar tersebut telah digantikan oleh pemilih warna berfungsi lengkap.

Saat Anda memasukkan nilai warna, pemilih warna ditampilkan secara otomatis dan menyajikan daftar warna yang digunakan sebelumnya diikuti oleh palet warna default. Anda dapat memilih warna menggunakan mouse atau keyboard.

Cuplikan layar yang memperlihatkan daftar warna yang digunakan sebelumnya diikuti oleh palet warna default.

Daftar dapat diperluas ke pemilih warna lengkap. Pemilih memungkinkan Anda mengontrol saluran alfa dengan secara otomatis mengonversi warna apa pun ke RGBA saat Anda memindahkan penggerak opasitas:

Cuplikan layar yang memperlihatkan pemilih warna dengan mengonversi warna apa pun secara otomatis ke R G B A saat Anda memindahkan penggelar opasitas.

Cuplikan

Cuplikan di editor CSS memudahkan dan lebih cepat untuk membuat gaya lintas browser. Banyak properti CSS3 yang memerlukan pengaturan khusus browser sekarang telah digulung menjadi cuplikan.

Cuplikan layar yang memperlihatkan Cuplikan di editor C S S. Kata-kata kemudahan masuk dipilih.

Cuplikan CSS mendukung skenario tingkat lanjut (seperti kueri media CSS3) dengan mengetik at-symbol (@), yang menunjukkan daftar IntelliSense.

Cuplikan layar yang ditampilkan di media dipilih di daftar IntelliSense.

Saat Anda memilih @media nilai dan menekan Tab, editor CSS menyisipkan cuplikan berikut:

Cuplikan layar yang memperlihatkan cuplikan dengan 1024 p x dipilih.

Seperti halnya cuplikan untuk kode, Anda dapat membuat cuplikan CSS Anda sendiri.

Wilayah kustom

Wilayah kode bernama, yang sudah tersedia di editor kode, sekarang tersedia untuk pengeditan CSS. Ini memungkinkan Anda mengelompokkan blok gaya terkait dengan mudah.

Cuplikan layar yang memperlihatkan editor kode. Blok gaya yang digunakan adalah untuk menu wilayah.

Saat wilayah diciutkan, wilayah akan menampilkan nama wilayah:

Cuplikan layar yang memperlihatkan wilayah Menu diciutkan.

Pemeriksa Halaman

Pemeriksa Halaman adalah alat yang merender halaman web (HTML, Formulir Web, ASP.NET MVC, atau Halaman Web) di Visual Studio IDE dan memungkinkan Anda memeriksa kode sumber dan output yang dihasilkan. Untuk halaman ASP.NET, Pemeriksa Halaman memungkinkan Anda menentukan kode sisi server mana yang telah menghasilkan markup HTML yang dirender ke browser.

Cuplikan layar yang memperlihatkan kode Visual Studio. Panel kanan memiliki kode sumber dan panel kiri merender halaman web.

Untuk informasi selengkapnya tentang Pemeriksa Halaman, silakan lihat tutorial berikut:

Menerbitkan

Terbitkan profil

Di Visual Studio 2010, informasi penerbitan untuk proyek aplikasi Web tidak disimpan dalam kontrol versi dan tidak dirancang untuk berbagi dengan orang lain. Di Kandidat Rilis Visual Studio 2012, format profil penerbitan telah diubah. Ini telah dibuat sebagai artefak tim, dan sekarang mudah untuk memanfaatkan dari build berdasarkan MSBuild. Informasi konfigurasi build ada dalam kotak dialog Terbitkan sehingga Anda dapat dengan mudah beralih konfigurasi build sebelum menerbitkan.

Profil publikasi disimpan di folder PublishProfiles. Lokasi folder tergantung pada bahasa pemrograman apa yang Anda gunakan:

  • C#: Properties\PublishProfiles
  • Visual Basic: Proyek Saya\PublishProfiles

Setiap profil adalah file MSBuild. Selama penerbitan, file ini diimpor ke dalam file MSBuild proyek. Di Visual Studio 2010, jika Anda ingin membuat perubahan pada proses penerbitan atau paket, Anda harus menempatkan kustomisasi Anda dalam file bernama ProjectName.wpp.targets. Ini masih didukung, tetapi Anda sekarang dapat menempatkan kustomisasi Anda di profil penerbitan itu sendiri. Dengan begitu, penyesuaian hanya akan digunakan untuk profil tersebut.

Anda sekarang juga dapat memanfaatkan profil penerbitan dari MSBuild. Untuk melakukannya, gunakan perintah berikut saat Anda membangun proyek:

msbuild.exe project.csproj /t:WebPublish /p:PublishProfile=ProfileName

Nilai project.csproj adalah jalur proyek, dan ProfileName adalah nama profil yang akan diterbitkan. Atau, alih-alih meneruskan nama profil untuk properti PublishProfile , Anda dapat meneruskan jalur lengkap ke profil penerbitan.

ASP.NET prakompulasi dan penggabungan

Untuk proyek aplikasi Web, Kandidat Rilis Visual Studio 2012 menambahkan opsi pada halaman properti Paket/Terbitkan Web yang memungkinkan Anda melakukan prakompeksi dan menggabungkan konten situs Saat Anda menerbitkan atau mengemas proyek. Untuk melihat opsi ini, klik kanan proyek di Penjelajah Solusi, pilih Properti, lalu pilih halaman properti Paket/Terbitkan Web. Ilustrasi berikut menunjukkan opsi Prakompeksi aplikasi ini sebelum penerbitan.

Cuplikan layar memperlihatkan bahwa untuk melihat opsi halaman properti Paket/Terbitkan Web, klik kanan proyek di Penjelajah Solusi, pilih Properti, lalu pilih halaman properti Paket/Terbitkan Web.

Saat opsi ini dipilih, Visual Studio melakukan prakompeksi aplikasi setiap kali Anda menerbitkan atau mengemas aplikasi web. Jika Anda ingin mengontrol bagaimana situs telah dikommpilasikan sebelumnya atau bagaimana rakitan digabungkan, klik tombol Tingkat Lanjut untuk mengonfigurasi opsi tersebut.

IIS Express

Server web default untuk menguji proyek web di Visual Studio sekarang adalah IIS Express. Server Pengembangan Visual Studio masih merupakan opsi untuk server web lokal selama pengembangan, tetapi IIS Express sekarang menjadi server yang direkomendasikan. Pengalaman menggunakan IIS Express di Visual Studio 11 Beta sangat mirip dengan menggunakannya di Visual Studio 2010 SP1.

Pengelakan

Ini adalah dokumen awal dan dapat diubah secara substansial sebelum rilis komersial akhir perangkat lunak yang dijelaskan di sini.

Informasi yang terkandung dalam dokumen ini menunjukkan tampilan Microsoft Corporation saat ini tentang masalah yang dibahas pada tanggal publikasi. Karena Microsoft harus menanggapi perubahan kondisi pasar, itu tidak boleh ditafsirkan sebagai komitmen dari pihak Microsoft, dan Microsoft tidak dapat menjamin keakuratan informasi apa pun yang disajikan setelah tanggal publikasi.

Laporan Resmi ini hanya untuk tujuan informasi. MICROSOFT TIDAK MEMBERIKAN JAMINAN, TERSURAT, TERSIRAT, ATAU HUKUM, MENGENAI INFORMASI DALAM DOKUMEN INI.

Mematuhi semua undang-undang hak cipta yang berlaku adalah tanggung jawab pengguna. Tanpa membatasi hak cipta, tidak ada bagian dari dokumen ini yang dapat direproduksi, disimpan dalam atau dimasukkan ke dalam sistem pengambilan, atau dikirimkan dalam bentuk apa pun atau dengan cara apa pun (elektronik, mekanis, fotokopi, perekaman, atau lainnya), atau untuk tujuan apa pun, tanpa izin tertulis dari Microsoft Corporation.

Microsoft mungkin memiliki paten, aplikasi paten, merek dagang, hak cipta, atau hak kekayaan intelektual lainnya yang mencakup materi pelajaran dalam dokumen ini. Kecuali secara tegas disediakan dalam perjanjian lisensi tertulis dari Microsoft, perabotan dokumen ini tidak memberi Anda lisensi apa pun untuk paten, merek dagang, hak cipta, atau kekayaan intelektual lainnya ini.

Kecuali dinyatakan lain, contoh perusahaan, organisasi, produk, nama domain, alamat email, logo, orang, tempat, dan peristiwa yang digambarkan di sini bersifat fiktif, dan tidak ada hubungan dengan perusahaan, organisasi, produk, nama domain, alamat email, logo, orang, tempat, atau acara yang sebenarnya dimaksudkan atau harus disimpulkan.

© Microsoft Corporation 2012. Semua hak dilindungi undang-undang.

Microsoft dan Windows adalah merek dagang terdaftar atau merek dagang Microsoft Corporation di Amerika Serikat dan/atau negara lain.

Nama perusahaan dan produk sebenarnya yang disebutkan di sini mungkin merupakan merek dagang dari pemiliknya masing-masing.