Review: Visual Sudio.NET 2003 [Beta 1]
By Peter A. Bromberg, Ph.D.
Printer - Friendly Version
Peter Bromberg
Yesterday, I received my Everett Beta and proceeded to install the 8 - CD package on one of my test partitions running .NET Server Enterprise. The good news is that if you leave out Crystal Reports, the MSDE and a couple of other items like Enterprise Templates and J#, you only need three of the CDS. The MSDN Library, which of course contains all the help and a lot more good content, comes on three of the CD's in the package. Visio and Visual Sourcesafe come on the remaining two CD's.



Installation - Good News!

Installation of Visual Studio.NET 2003 on .NET Server Enterprise went smoothly. Remembering my pain from Beta II and RTM, I turned off both ZoneAlarm's TrueVector service and the Norton Antivirus services and set them to "Manual" so they wouldn't restart on a reboot. There were no hitches at all during installation. In fact, the progress dialogs are a lot more accurate. Remember the one that said "Estimated Time Remaining: 1 minutes" and it said that for 29 minutes? That's fixed. It went from the "5 minutes" level down to zero in less than 2 minutes.

But then when I wanted to create a new Web Project, I got the annoying dialog shown in Fig. 1 below:

Fig.1 Typical misleading error dialog on .NET Server

It turns out that on .NET Server, everything in IIS is locked down by default. This means that even when you install a new feature, you have to go into the Web Application Manager and "enable" it. So the dialog is misleading because it makes you think (incorrectly) that ASP.NET version 1.1 is not installed. It is installed -- it's just not enabled.

Some problems you may encounter

After upgrading from Windows 2000 Server to Windows .NET Server, Visual Studio .NET 2003 Beta 1 cannot create managed projects.

When upgrading from Windows 2000 Server with Visual Studio .NET 2003 Beta 1 installed to Windows .NET Server, Visual Studio .NET Beta 1 can no longer create managed projects (for example, ASP.NET applications or Windows Forms projects).

To resolve this issue, repair the .NET Framework

For the DVD version of Visual Studio .NET 2003 Beta 1, insert the DVD. From the Windows Start menu, choose Run and type:
<DVD Drive>:\wcu\dotNetFramework\dotnetfx.exe /t:c:\temp /c:"msiexec.exe /fvecms c:\temp\netfx.msi"

-or-

For the CD version of Visual Studio .NET 2003 Beta 1, insert the Visual Studio .NET Prerequisites CD. From the Windows Start menu, choose Run and type:

<CD Drive>:\dotNetFramework\dotnetfx.exe /t:c:\temp /c:"msiexec.exe /fvecms c:\temp\netfx.msi"

During the repair, you will see several error messages reading, "Error 1931. Windows Installer Service can't update <File>. This file is protected by Windows." You may safely click OK to each error message. The repair will complete successfully.
At this point, you are now able to build managed Windows applications. If you want to host ASP .NET Web applications or services on this machine, the following steps are also required.

To reinstall ASP.NET

From the Start menu, choose Run.
In the Open dialog box, type appwiz.cpl, and then click OK to open the Add/Remove Programs dialog box.
In the Add/Remove Programs dialog box, choose Add/Remove Windows Components in the left pane of the dialog box.
Select Web Application Server, and then click Details.
On the Web Application Server options page, check ASP.NET if it is not already selected, then click OK.
Click Next to begin installing ASP.NET.

To enable ASP.NET access through IIS (this is what I had to do):

From the Start menu, choose Run.
In the Open dialog box, type compmgmt.msc \s, and then click OK to open the Computer Management dialog box.
In the Computer Management dialog box, expand Services and Applications.
In the Services and Applications node, click Services and find World Wide Web Publishing Service in the right pane. If the status is Started, skip to step 6. Otherwise, double-click World Wide Web Publishing Service to open the Properties window, change Startup type to Automatic, and click Start in the Service Status area, click OK.
In the Services and Applications node, right-click Internet Information Services, select All Tasks from the shortcut menu, choose Restart IIS, and click OK to start IIS.
In the Services and Applications node, expand Internet Information Services.
Click Web Service Extensions.
In the right pane, select each instance of ASP.NET and click the Allow button.

New Features:

The Microsoft .NET Framework version 1.1 Beta extends the .NET Framework version 1.0 with new features, improvements to existing features, and enhancements to the documentation. I'll outline the major feature areas of the new release below.

Native Support for Developing Mobile Web Applications
The .NET Framework 1.1 Beta now features native support for developing mobile Web applications. ASP.NET Mobile Controls (formerly the Microsoft Mobile Internet Toolkit) extend ASP.NET server controls such that they adapt to the mobile device on which the Web application is rendering. Through browser detection, the mobile controls conform to the capabilities of individual devices ranging from full-featured personal digital assistant (PDA) browsers to small, 5-line × 20-character mobile phone displays. This adaptive rendering feature handles many of the tedious, device-specific rendering decisions and frees you to focus on your Web application logic. The .NET Framework 1.1 Beta incorporates the mobile controls into the .NET Framework and Microsoft Visual Studio® .NET distributions.

Granular Version Control: Side-by-Side Execution
Support for side-by-side execution in the .NET Framework 1.1 Beta enables system administrators to store and execute multiple versions of an application or component on the same computer. This means that you can have multiple versions of the .NET Framework Redistributable, as well as multiple versions of applications and components that use a version of the Redistributable, on the same computer at the same time.

Side-by-side execution does not imply that a managed application is compatible with other versions of the Redistributable or of a component. Rather, it means that a managed application can choose the Redistributable and the components it executes with, and that multiple versions of the Redistributable, applications, and components can coexist on the same computer. Systems administrators control this through the application's configuration file.

How Apps behave against different versions of the .NET Framework:

By default, in the absence of configuration file instructions:

  • If an application written with the .NET Framework 1.0 is installed on a system with only the .NET Framework 1.1 Redistributable present, the application will try to run against version 1.1.
  • If an application written with the .NET Framework 1.0 is installed on a system with both versions 1.1 and 1.0 of the Redistributable present, the application will run against version 1.0 unless an administrator changes the behavior.
  • If an application written with the .NET Framework 1.1 Beta is installed on a system with only the .NET Framework 1.0 Redistributable, it will not run (unless configured to do so).
  • ASP.NET applications represent an exception to this behavior. When the .NET Framework 1.1 Redistributable is installed on a server, ASP.NET Web applications and XML Web services are, by default, automatically configured to run with it. Again, systems administrators have the ability to override this default behavior and configure some or all of these applications to run with the .NET Framework 1.0 Redistributable.

    Enable Execution of Windows Forms Assemblies Originating from the Internet

    Assemblies originating from the Internet Zone—for example, Microsoft Windows® Forms controls embedded in an Internet-based Web page or Windows Forms assemblies hosted on an Internet Web server and loaded either through the Web browser or programmatically using the System.Reflection.Assembly.LoadFrom() method—now receive sufficient permission to execute in a semi-trusted manner. Default security policy has been changed so that assemblies assigned by the common language runtime to the Internet Zone code group now receive the constrained permissions associated with the Internet permission set. In the .NET Framework 1.0 Service Pack 1 and Service Pack 2, such applications received the permissions associated with the Nothing permission set and could not execute.

    Note: While we are re-enabling code from the Internet Zone, the defaults do not give this code full access to the user's machine. By default, thanks to code access security, this code runs in a restricted manner and is allowed access only to a limited set of resources that are safe to use. This code cannot damage your data or system, nor can it steal private information that you do not explicitly give it.

    Enable Code Access Security for ASP.NET Applications
    Systems administrators can now use code access security to further lock down the permissions granted to ASP.NET Web applications and XML Web services. Although the operating system account under which an application runs imposes security restrictions on the application, the code access security system of the common language runtime can enforce additional restrictions on selected application resources based on policies specified by systems administrators. You can use this feature in a shared server environment (such as an Internet service provider (ISP) hosting multiple Web applications on one server) to isolate separate applications from one another, as well as with stand-alone servers where you want applications to run with the minimum necessary privileges.

    Native Support for Communicating with ODBC and Oracle Databases
    Developers can now enjoy native support for communication with ODBC and Oracle databases. The .NET Framework Data Provider for ODBC, which previously was available only as a Web download, now ships with the .NET Framework under the namespace System.Data.Odbc. It provides access to native ODBC drivers the same way the OLE DB .NET Data Provider provides access to native OLE DB providers.

    The .NET Framework Data Provider for Oracle, which also previously was available only as a Web download, now ships with the .NET Framework under the namespace System.Data.OracleClient. It provides access to Oracle databases using the Oracle Call Interface (OCI) as provided by Oracle Client software.

    Unified Programming Model for Smart Client Application Development
    The Microsoft .NET Compact Framework brings the common language runtime, Windows Forms controls, and other .NET Framework features to small devices. The .NET Compact Framework supports a large subset of the .NET Framework class library optimized for small devices.

    Supported devices include the Pocket PC 2000, Pocket PC 2002, Pocket PC 2002 Phone Edition, and custom-designed embedded devices built with the Windows CE .NET 4.1 operating system. Earlier versions of Windows CE .NET are not supported.

    The .NET Compact Framework provides the following key features:

    A compact common language runtime that brings the benefits of managed code (such as memory management, code reliability, and language neutrality) to devices.
    Consistency with desktop and server programming models.
    Seamless connection with XML Web services.
    Rich enterprise-class data access features with XML classes and ADO.NET.
    Classes to program applications that access data using Microsoft SQL Server™ 2000 Windows CE 2.0.
    Full access to native platform features through platform invoke.
    Just-in-time (JIT) compilation for optimal performance.
    Note: The .NET Compact Framework does not ship natively with the .NET Framework and is not available through the .NET Framework 1.1 Beta program.

    Developers may access the .NET Compact Framework using the next version of Visual Studio .NET and, in the short term, through the Visual Studio "Everett" release beta program (this release).

    Support for IPv6
    The .NET Framework 1.1 supports the emerging update to the Internet Protocol, commonly referred to as IP version 6, or simply IPv6. This protocol is designed to significantly increase the address space used to identify communication endpoints in the Internet to accommodate its ongoing growth.

    Scalability, Performance, Documentation
    In addition to the areas discussed above, significant improvements have been made to the .NET Framework in the areas of scalability and performance. Enhancements have also been made to the documentation, which now includes more code examples and several new sections (including one entitled Secure Code Guidelines).

    CODE CHANGES:

    From VS.NET 1.0 to 1.1 there are 985 net new member additions to the Framework, with 24 net breaking changes:

    Assembly Members
    Added
    Members
    Removed
    Breaking Changes
    accessibility (20)
    0
    0
    0
    ieexecremote (10)
    1
    1
    0
    iehost (36)
    1
    0
    2
    iiehost (15)
    3
    0
    5
    isymwrapper (217)
    8
    8
    0
    microsoft.visualbasic (800)
    2
    0
    0
    microsoft.visualc (81)
    1
    0
    0
    microsoft.vsa (145)
    0
    0
    0
    microsoft.vsa.vb.codedomprocessor (24)
    0
    0
    0
    microsoft_vsavb (50)
    0
    0
    0
    mscorlib (13811)
    149
    4
    2
    regcode (37)
    0
    0
    0
    system (8087)
    92
    2
    0
    system.configuration.install (372)
    0
    0
    0
    system.data (3590)
    486
    14
    0
    system.design (4315)
    0
    0
    0
    system.directoryservices (339)
    0
    0
    0
    system.drawing (3206)
    1
    0
    0
    system.drawing.design (151)
    0
    0
    0
    system.enterpriseservices (863)
    116
    0
    0
    system.management (1072)
    14
    0
    0
    system.messaging (1104)
    0
    0
    0
    system.runtime.remoting (428)
    4
    0
    0
    system.runtime.serialization.formatters.soap (19)
    1
    0
    0
    system.security (338)
    8
    0
    0
    system.serviceprocess (701)
    0
    0
    0
    system.web (10143)
    46
    3
    0
    system.web.regularexpressions (480)
    0
    0
    0
    system.web.services (2439)
    12
    1
    0
    system.windows.forms (20574)
    48
    14
    0
    system.xml (4118)
    52
    13
    15
    TOTALS
    1045
    60
    24
    Total Net Added:
    985

    There have been a large number of additions in the System.Data and System.Xml namespaces, as well asl System.Windows.Forms and System.EnterpriseServices. Many of these have been added to bring the Framework into conformity with new features in .NET Server.

    Redirecting Applications:

    By default, an application only works with the version of the .NET Framework with which it was compiled. In this case, no configuration file is necessary to execute the application. However, if you want an application built with one version of the .NET Framework to execute on one or more different versions of the .NET Framework, then you must use an appropriate configuration file.

    Specifying the version of the .NET Framework the application is to use is called redirecting the application. An application can be redirected to use only a particular version of the .NET Framework, or one of a set of candidate versions selected by order of preference. You can create the configuration file automatically using Visual Studio .NET, or manually using the following information.

    If your application does not have a configuration file, create one in the same directory as your application. Name the configuration file the same name as your application with ".config" appended to the name. For example, if the name of an application is MyApp.exe, then the name of the corresponding configuration file is MyApp.exe.config.

    Configuration File Tags

    Redirect your application by specifying the appropriate configuration file tags. In this example, the <requiredRuntime> tag is used to redirect your application to a computer that only has the .NET Framework version 1.0 installed.

    <startup>

    <requiredRuntime imageVersion="v1.0.3705" version="v1.0.3705" />

    </startup>

    For the .NET Framework version 1.0, the configuration file needs to redirect any dependent assemblies your application requires because version 1.0 does not automatically reference dependent assemblies. As a result, your configuration file can be very large. In this example, an assembly is redirected to the .NET Framework version 1.0.

    <dependentAssembly>

    <assemblyIdentity name="Accessibility" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

    </dependentAssembly>

    For the .NET Framework version 1.1, the configuration file is smaller because the runtime automatically references dependent assemblies on your behalf. The ability of the .NET Framework to automatically reference dependent assemblies is called unification. That means you only need a simple configuration file to unify an application and its referenced assemblies with one version of the .NET Framework.

    Specify one or more <supportedRuntime> tags in your configuration file to indicate the versions of the .NET Framework your application can execute on. The order of the tags indicates the preferred order of candidate .NET Framework versions. That is, the first tag indicates the foremost version you want to use; if that version is not installed, then the second tag indicates the second most preferred version you want to use, and so on.

    The following example redirects an application built with the .NET Framework version 1.0 to execute on version 1.1.

    <startup>

    <supportedRuntime version="v1.0.5000" />

    </startup>

    If the .NET Framework version 1.1 is installed on your computer, specify multiple <supportedRuntime> tag entries to specify multiple versions of the .NET Framework. If you want an application to run on the .NET Framework version 1.0, you still need a <requiredRuntime> tag and the redirection tags for each assembly your application uses.

    In the following example, the .NET Framework version 1.1 is preferred, but if that version is not available version 1.0 is used.

    <startup>

    <requiredRuntime imageVersion="v1.0.3705" version="v1.0.3705" />

    <supportedRuntime version="v1.0.5000" />

    <supportedRuntime version="v1.0.3705" />

    </startup>

    Configuration Files for Mixed Versions of Applications and Frameworks

    The following section describes the part of the configuration file required to run various versions of your application on various versions of the .NET Framework.

    To run an application built with the .NET Framework version 1.0 on version 1.0, no redirection is necessary. This is the default behavior of a .NET Framework version 1.0 application.

    To run an application built with the .NET Framework version 1.0 on version 1.1, include a configuration file with your application like the following:

    <?xml version ="1.0"?>

    <configuration>

    <startup>

    <supportedRuntime version="v1.0.5000" />

    </startup>

    </configuration>

    To run an application built with the .NET Framework version 1.0 on either version 1.0 or version 1.1, include a configuration file with your application that includes two <supportedRuntime> tags, and a <requiredRuntime> tag. The first <supportedRuntime> tag redirects to .NET Framework version 1.0. The <requiredRuntime> tag redirects to version 1.0.

    Include redirection sections for all assemblies referenced by your application. Redirect these assemblies to version 1.0 since these sections are not used by version 1.1.

    For example:

    <startup>

    <requiredRuntime imageVersion="v1.0.3705" version="v1.0.3705" />

    <supportedRuntime version="v1.0.3705" />

    <supportedRuntime version="v1.0.5000" />

    </startup>

    <runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

    <dependentAssembly>

    <assemblyIdentity name="Regcode"
    publicKeyToken="b03f5f7f11d50a3a" culture=""/>

    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535"
    newVersion="1.0.3300.0"/>

    </dependentAssembly>

    <!-- Include a section for each assembly to be redirected. -->

    </assemblyBinding>

    </runtime>

    To run an application built with the .NET Framework version 1.1 on version 1.1, no redirection is necessary. This is the default behavior for a .NET Framework version 1.1 application.

    To run an application built with the .NET Framework version 1.1 on the .NET Framework version 1.0, include a <requiredRuntime> tag in your configuration file that points to the .NET Framework version 1.0. Include all necessary redirections for assemblies your application references.

    To run an application built with the .NET Framework version 1.1 on version 1.1 or version 1.0, include a configuration file with your application that includes two <supportedRuntime> tags, and a <requiredRuntime> tag. The first <supportedRuntime> tag redirects to .NET Framework version 1.1. The <requiredRuntime> tag redirects to the .NET Framework version 1.0.

    Include redirection sections for all assemblies referenced by your application. Redirect these assemblies to the .NET Framework version 1.0 since these sections are not used by .NET Framework version 1.1.

    WARNING - Updating a Visual Studio .NET version 1.0 Project:

    If you open a project built with Visual Studio .NET version 1.0 in Visual Studio .NET version 1.1, you will get a warning saying that the project will be automatically upgraded to Visual Studio .NET version 1.1 and your application will be upgraded to execute on the .NET Framework version 1.1. After the project is opened in Visual Studio version 1.1, you cannot open it in Visual Studio .NET version 1.0. This is true even if you do not rebuild your application. Furthermore, opening your project in the later version of Visual Studio does not automatically guarantee that your application will still compile and run.

    To run a .NET Framework version 1.0 application on version 1.1 (Backward Compatibility), perform your test on a separate computer that only has .NET Framework 1.1 installed.

    In sum, this is a promising new release. The addition of code access security to ASP.NET application is a useful feature. It seems that Microsoft has continued to apply much of what they've learned to optimizing performance. Even the IDE loads up faster. When this is fully bug - tested and ships with .NET Server 2003, I predict we have a winning combination coming from the folks in Redmond.


    Peter Bromberg is a C# MVP, MCP, and .NET consultant who has worked in the banking and financial industry for 20 years. He has architected and developed web - based corporate distributed application solutions since 1995, and focuses exclusively on the .NET Platform. Pete's samples at GotDotNet.com have been downloaded over 41,000 times. You can read Peter's UnBlog Here.  --><--NOTE: Post QUESTIONS on FORUMS!

    Do you have a question or comment about this article? Have a programming problem you need to solve? Post it at eggheadcafe.com forums and receive immediate email notification of responses.