Lesson 1 – Assemblies and Resources

Assemblies





[assembly: AssemblyTitle(“”)]

[assembly: AssemblyDescription(“”)]

[assembly: AssemblyConfiguration(“”)]


Class Library Assemblies


Resources and Resource Assemblies




Satellite Assemblies


Retrieving Resources


// Obtain resources from same assembly

ResourceManager myManager = new

ResourceManager(“myNamesapce.myResources”,

this.GetType().Assembly);


// Obtain resources from another assembly

System.Reflection.Assembly myResources;


myResources =

System.Reflection.Assembly.Load(“ResAssembly”);


ResourceManager myManager = new

ResourceManager(“myNamesapce.myResources”,

myResources);



Shared Assemblies





sn –k myKey.snk



<Assembly: AssemblyKeyFile(“..\\..\\myKey.snk”);



gacutil /i myAssembly.dll


Lesson 2 – Configuration and Optimisation

The Configuration File


<?xml version=”1.0” encoding=”utf-8” ?>

<configuration>

<!-- configured elements go here -->

</configuration>



Dynamic Properties


Using Properties Window To Configure Properties


<add key=”Button1.Text” value=”Button1”>


appears in config file to configure Text attribute of Button1 control.


Setting / Retrieving Dynamic Properties Manually


//Create AppSettingsReader

System.Configuration.AppSettingsReader myReader = new

System.Configuration.AppSettingsReader();


// Create a widget

Widget myWidget = new Widget();


// Retrieve dynamic property

myWidget.Text = myReader.GetValue(“DynamicWidget.Text”,

typeof(System.String).ToString());



<appSettings>

<add key=”Widget.Visible” value=”True”/>

<add key=”Widget.Text” value=”Hello, world”/>

</appSettings>


Optimise performance


  1. Measure performance data

  2. Identify bottlenecks

  3. Tune code

  4. Repeat


Measuring performance


Compiler Optimisations


Lesson 3 – Security


Permissions


Role Based Authorisation


AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrinciplal);



WindowsPrincipla myPrincipal;

myPrincipal = (WindowsPrincipal)

System.Threading.Thread.CurrentPrincipal;


WindowsIdentity myIdentity;

myIdentity = (WindowsIdentity) myPrincipal.Identity;


MessageBox.Show(myIdentity.Name);


Imperative Security


// Create principal permission for manager named megan

PrincipalPermission myPermission = new

PrincipalPermission(“Megan”, “Manager”);


// Ensure current user is manager named megan

myPermission.Demand();



// Create principal permission for manager named megan

PrincipalPermission Permission1 = new

PrincipalPermission(“Megan”, “Manager”);


// Create principal permission for group manager named

// ann

PrincipalPermission Permission2 = new

PrincipalPermission(“Ann”, “Group Manager”);


// Create union

PrincipalPermission Permission3 = (PrincipalPermission)

Permission2.Union(Permission1);


// Ensure current user is manager named megan and

// group manager named ann

Permission3.Demand();



// Create permission to check user is a manager

PrincipalPermission myPermission = new

PrinicpalPermission(null, “Manager”);


// Create permission to check user is an Administrator

PrincipalPermission myPermission = new

PrinicpalPermission(null,

BUILTIN\\Administrators”);


Declarative Security


[PrincipalPermission(SecurityAction.Demand, Name=”Joe”, Role=”Clerk”)]

public void MyMethod()

{

}


Code Access Security



FileIOPermission myPermission = new

FileIOPermission( FileIOPermissionAccess.Write

, “C:\\myFile.txt”);



ReflectionPermission myPermission = new

ReflectionPermission(PermissionState.Unrestricted);


UIPermission anotherPermission = new

UIPermission(PermissionState.None);



Imperative Security


// Create permission object representing unrestricted

// access to file system

FileIOPermission myPermission = new

FileIOPermission(Permissionstate.Unrestricted);


// Verify all callers to code have unrestricted access

// to file system

myPermission.Demand();



// Create permission object representing unrestricted

// access to file system

FileIOPermission myPermission = new

FileIOPermission(Permissionstate.Unrestricted);


// Denies access to the file system from this method

myPermission.Deny();



// Create permission object representing only write

// access to c:\myFile.txt

FileIOPermission myPermission = new

FileIOPermission(FileIOPermission.Write

, “C:\\myFilt.txt”);


// Only allow write access to c:\myFile.txt, deny all

// else

myPermission.PermitOnly();


// Create permission object representing unrestricted

// access to file system

FileIOPermission myPermission = new

FileIOPermission(Permissionstate.Unrestricted);


// Assert that this method has unrestricted access to

// file system

myPermission.Assert();



Declarative Security


// Deny fileIOPermission to class

[FileIOPermission(SecurityAction.Deny)]

public class aClass

{

}




[assembly: FileIOPermission(SecurityAction.RequestMinimum)]



[FileIOPermission(SecurityAction.Assert, Write=”C:\\myFile.txt”)]

public void WriteFile()

{

}


Exception Handling and Imperative Security