Because the MathUtil.dll assembly is not digitally signed, a hacker could replace this assembly with one that contains malicious code, and the client of this assembly (which is the WindowsApp-Util application in this case) would not know that the assembly has been tampered with. Later in this chapter, you will see how to give the assembly a unique identity using a strong name.

Modules and Assemblies

An application using a library loads it only when necessary — the entire library is loaded into memory during runtime. If the library is large, your application uses up more memory and takes a longer time to load. To solve this problem, you can split an assembly into multiple modules and then compile each individually as a module. The modules can then be compiled into an assembly.

To see how you can use a module instead of an assembly, add a new Class Library project to the solution used in the previous section. Name the Class Library project StringUtil. Populate the default Class1.cs file as follows: 

using System.Text.RegularExpressions;

namespace StringUtil {

 public class Utils {

  public bool ValidateEmail(string email) {

   string strRegEx = @'^([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}' +

    @'.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+' +

    @'.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$';

   Regex regex = new Regex(strRegEx);

   if (regex.IsMatch(email)) return (true);

   else return (false);

  }

 }

}

Instead of using Visual Studio 2008 to build the project into an assembly, use the C# compiler to manually compile it into a module.

To use the C# compiler, launch the Visual Studio 2008 Command Prompt (Start→Programs→Microsoft Visual Studio 2008→Visual Studio Tools→Visual Studio 2008 Command Prompt).

Navigate to the folder containing the StringUtil project, and type in the following command to create a new module:

csc /target:module /out:StringUtil.netmodule Class1.cs

When the compilation is done, the StringUtil.netmodule file is created (see Figure 15- 12).

Figure 15-12 

Do the same for the MathUtil class that you created earlier (see Figure 15-13):

csc /target:module /out:MathUtil.netmodule Class1.cs

Figure 15-13

Copy the two modules that you have just created — StringUtil.netmodule and MathUtil.netmodule — into a folder, say C:Modules. Now to combine these two modules into an assembly, type the following command:

csc /target:library /addmodule:StringUtil.netmodule /addmodule:MathUtil.netmodule /out:Utils.dll

This creates the Utils.dll assembly (see Figure 15-14).

Figure 15-14

In the WindowsApp-Utils project, remove the previous versions of the MathUtil.dll assembly and add a reference to the Utils.dll assembly that you just created (see Figure 15-15). You can do so via the Browse tab of the Add Reference dialog (navigate to the directory containing the modules and assembly, C:Modules). Click OK.

Figure 15-15

In the code-behind of Form1, modify the following code as shown:

namespace WindowsApp_Util {

 public partial class Form1 : Form {

  public Form1() {

   InitializeComponent();

  }

  private void Form1_Load(object sender, EventArgs e) {

   CallMathUtil();

   CallStringUtil();

  }

  private void CallMathUtil() {

   MathUtil.Utils util = new MathUtil.Utils();

   MessageBox.Show(util.Fibonacci(7).ToString());

  }

  private void CallStringUtil() {

   StringUtil.Utils util = new StringUtil.Utils();

   MessageBox.Show(util.ValidateEmail(

    '[email protected]').ToString());

  }

 }

} 

The CallMathUtil() function invokes the method defined in the MathUtil module. The CallStringUtil() function invokes the method defined in the StringUtil module.

Set a break point in the Form1_Load event handler, as shown in Figure 15-16, and press F5 to debug the application.

Figure 15-16

When the breakpoint is reached, view the Modules window (Debug→Windows→Modules), and note that the Utils.dll assembly has not been loaded yet (see Figure 15-17).

Figure 15-17

Press F11 to step into the CallMathUtil() function, and observe that the Utils.dll assembly is now loaded, together with the MathUtil.netmodule (see Figure 15-18).

Figure 15-18

Press F11 a few times to step out of the CallMathUtil() function until you step into CallStringUtil(). See that the StringUtil.netmodule is now loaded (see Figure 15- 19).

Figure 15-19

Вы читаете C# 2008 Programmer's Reference
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату