Errata

MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework - Application Development

Errata for MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework - Application Development

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Other Digital Version CD
Practice Test

For question:
"You have derived a custom class from the Installer class. If the user cancels an installation, you need to run special code to remove changes you have made.

Which of the following Installer methods would you place the code in?"

The reference for this question points the reader to Chapter 9 Lesson 2. It should be Chapter 9 Lesson 3.

Anonymous  Sep 11, 2011 
Other Digital Version CD
Practice Exam

For Question:

"You are creating a custom installer manually rather than using the tools in Microsoft Visual Studio to generate an installer automatically."

The correct answer says "Override the OnInstall and OnCommit and OnRollback and OnUninstall Methods".

That is not right as the answer key itself says these methods do not exist.

The correct step is: "Override the Install, Commit, Rollback, and Uninstall methods."

Anonymous  Sep 11, 2011 
Printed Page 141
last paragraph

The brief description of BinarySearch neglects to mention that the ArrayList must be sorted before BinarySearch is called. This contributes to the next problem on page 142.

Anonymous  Aug 05, 2010 
Printed Page 142
first VB and C# code examples.

The code examples do not produce the answer expected. In both the VB and C# samples, the code line al.Sort() needs to be inserted before the Console.WriteLine statement.

Anonymous  Aug 05, 2010 
Printed Page 143
in the first bullet under Dictionaries

On page 143, in the first bullet under Dictionaries, "or index" should be removed.

Change:
"A dictionary of name/value pairs that can be retrieved by name or index"

To:
"A dictionary of name/value pairs that can be retrieved by name"

Anonymous  Nov 24, 2010 
Printed Page 145
3rd paragraph, first sentence.

"NameValueCollection also provides similar functionality, but it allows you to use either a string or an integer index for the key" is incorrect.

A suggested change is: "The NameValueCollection represents a collection of string keys and string values."

Anonymous  Aug 05, 2010 
Printed Page 157
Step 4

First sentence reads: "Bind the shoppingCartList.ItemSource property...".
It should read "Bind the shoppingCartList.ItemsSource property...".

Anonymous  Aug 05, 2010 
Printed Page 223
the description of the ImageFormatConverter class

On page 223, the description of the ImageFormatConverter class is incorrect.

Change:

"Converts colors from one data type to another. Access this class through the TypeDescriptor object."

To:

"Converts ImageFormat objects from one data type to another. Access this class through the TypeDescriptor object."

Anonymous  Dec 09, 2010 
PDF Page 263
2nd section, Chapter Simmary

I think Image object is an abstract object and can't be worked with directly, only through objects which expose it - such as Bitmap object, or formBackgroundImage. I suggest removing or rewording this sentance to indicate this

Mike Hingley  Aug 06, 2010 
Printed, PDF Page 304
point 5, first sentence

The line reads:

"Next, update the PageSize class to store the callback method, and accept the callback as a parameter for the constructor."

This step was already done in point 4 (page 303). This line can be ignored/ deleted.

Andrew  Sep 01, 2010 
Printed Page 345

Page 345 in the C# code sample, the first line reads:
ServiceController sc = new ServiceController("Server");

The ServiceController constructor that accepts one parameter expects a string that represents the display name of the service.

The example code would be clearer as follows:
ServiceController sc = new ServiceController("ServiceName");

Bob Verhey  Nov 08, 2010 
Printed Page 426
Question 1, Answer D

Question 1, Answer D should read pc.IncrementBy(12), not pc.Increment(12)

Scott MacLaren  Aug 28, 2010 
PDF Page 441
Answer Option B / Answer Option D

option B's C# code does not match the VB.NET code.

The VB.NET version of code assigns search result into a ManagementObjectDollection object called queryCollection.

In C# queryCollection is defined as a ManagementObject.

Answers section notes that option B is incorrect:

"Incorrect: The ManagementObjectSearcher.Get method returns an instance of ManagementObjectCollection. It does not return a ManagementObject Instance."

Option B's VB.NET code is also identical to D's VB.NET code, so I would suggest changing the VB.NET code to read :

Dim searcher as New ManagementObjectSearcher( _
"SELECT * FROM Win32_LogicalDisk")
Dim query as ManagementObject = searcher.Get()

as this matches the answers section.

Computa_mike  Aug 13, 2010 
Printed, PDF Page 514
Lesson 3 Questions

The book has 4 questions and 5 answers, and the PDF version has 4 questions and 4 answers. And other than question 1, in neither case do the answers match the questions!

Scott MacLaren  Aug 30, 2010 
Printed, PDF Page 514
Lesson 3, questions and answers

(See Scott MacLaren's note for this page)

It looks like:
- Answer 1 matches Question 1 (but gives the wrong answer?)
- Answer 2 matches Question 1 (but gives the correct answer?)
- Answer 3 matches Question 2
- Answer 4 matches Question 3
- Answer 5 matches Question 4

BTW: My PDF version is the same as my printed version: 4 questions and 5 answers.

Andrew  Sep 01, 2010 
Other Digital Version 536P-VB_3.5_02
CD ROM questions

question :

You are in the process of isolating a complicated bug in a Console application that occurs only in rare circumstances. You
need to write information to the debugging console, but you do not want to waste processing cycles when users run release
versions of the application.

---
This question is really asking how to write information to the console of an attached debugger. This is different from writing to the debugging console, as if I am debugging a console application (and this is a console application) then writing to the console while debugging would facilitate this. The wording does not talk about attached debuggers, therefore I would suggest altering the wording to clarify that by console, the questioner is referring to a console on an attached debugger, rather than the console application itself.

Computa_mike  Sep 07, 2010 
Other Digital Version 536P-VB_5.2_03
CD ROM Readyness Test

Question :

Dim e As NTAccount = New NTAccount("Everyone")
Dim rar As RegistryAuditRule = New RegistryAuditRule(e, _
RegistryRights.SetValue, InheritanceFlags.ContainerInherit, _
PropagationFlags.InheritOnly, AuditFlags.Failure)
Dim rs As RegistrySecurity = New RegistrySecurity
rs.AddAuditRule(rar)
Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", True)
rk.SetAccessControl(rs)
rk.Close

Correct answer is given as :

Enables auditing so that an event is added to the Security event log if any user successfully modifies a registry value in
HKEY_LOCAL_MACHINE\SOFTWARE

This is not the case - the AuditFlags.Failure is a bitwise flag. This code will only log failed attempts.

I can't test this at the moment...- I don't have the appropriate security privilages on the machine I am currently using.

Computa_mike  Sep 07, 2010 
Other Digital Version 536P-VB_1.6_08
CDROM Question

Readyness CD ROM question :536P-VB_1.6_08

Which of the following are events for the System.Windows.Forms.Button class? (Choose three.)
1. Enter
2. Click
3. Serializing
4. MouseOver
5. Resize
6. MouseHover

Explanation:
Click, Enter, and MouseHover are all valid events for the System.Windows.Forms.Button class.
MouseOver, Resize, and Serializing are not events for the Button class.

If you examine a button using Visual Studio 2005 it does have a resize event. This question is incorrect

Computa_mike  Sep 08, 2010 
Other Digital Version 536P-VB_1.1_02
CD ROM Question

CD ROM Question : 536P-VB_1.1_02

What is the output of the following Visual Basic code?
Dim s1 As String = "hello"
Dim s2 As String = "h"
s2 += "ello"
Console.WriteLine(s1 = s2)
Console.WriteLine(CType(s1, Object) = CType(s2, Object))
1. True
False

2. False
True
3. True
True
4. False
False

Pasting this code into Visual Studio presents an error - Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.

Naturally this could be resolved by deactivating the Strict option. Option Strict is enabled by default, and there is a general agreement within the VB.NET community that Option Strict is generally a good thing.

To fix the code to use the Is operator is trivial, but changes the output from True True to True False.

Ultimately the question is flawed, as the code(as provided) will not work with a standard Visual Studio session - either requiring a change to the project or the code. And if the code changes the answers are different.

Computa_mike  Sep 08, 2010 
Other Digital Version 536P-VB_4.6_03
approx 3rd paragraph

CD ROM Readyness question :

You need to create a new text file.
Which of the following Visual Basic code samples does this correctly?
1. Dim tw As TextWriter = New TextWriter("output.txt", FileAccess.Write)
2. Dim tw As TextWriter = New TextWriter("output.txt")
3. Dim tw As TextWriter = File.CreateText("output.txt")
4. Dim tw As TextWriter = File.Open("output.txt")

Explanation:
You can create a new TextWriter object by calling the static File.Create or File.CreateText methods.

File.Open works only when accessing files that already exist.

TextWriter does not have a constructor that accepts parameters. Instead, you should define the instance using the File.Create
or File.CreateText static methods.
----
The ascertion that File.Open works only when access files that exist is wrong. File.Open an overload which accepts a System.IO.FileMode enum value - one of which is System.IO.FileMode.OpenOrCreate.

Intellisense says :
Specifies that the operating system should open a file if it exists; otherwise, a new file should be created. If the file is opened with FileAccess.Read, System.Security.Permissions.FileIOPermissionAccess.Read is required. If the file access is FileAccess.Write then System.Security.Permissions.FileIOPermissionAccess.Write is required. If the file is opened with FileAccess.ReadWrite, both System.Security.Permissions.FileIOPermissionAccess.Read and System.Security.Permissions.FileIOPermissionAccess.Write are required. If the file access is FileAccess.Append, then System.Security.Permissions.FileIOPermissionAccess.Append is required.


Computa_mike  Sep 09, 2010 
Printed Page 553
2nd last paragraph

the last sentence of the second paragraph should finish '..the Deny ACE means that all members of the Accounting group are denied access to the file.'

Scott MacLaren  Sep 04, 2010 
Printed Page 570
Bulit Points

Found another (among a few others) error: page 570 & 571... Creating Symmetric keys. The Salt value seems to be incorrect. The answer to question 2 in the back of the book states "salt" is not apart of Symmetric algorithms... but here on page 570 & 571 "salt" is clearly listed as being apart of Symmetric algorithms... I go take this test in approx. 2 weeks... I'm wondering... How many things did I not catch... The only reason I caught this was because there was a discrepancy between the question, answer, and the material on page 570 & 571. I hope the material at the web page listed below is correct:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

Aaron Ford  Dec 19, 2012 
Printed Page 584
Step 4

To match the way SHA1 is used for example by Microsoft to validate that a ISO file download was successful, replace
Convert.ToBase64String(myHash.Hash)
with
System.BitConverter.ToString(myHash.Hash)

Anonymous  Jun 02, 2010 
PDF Page 605
1st Paragraph

Location of SAPI.DLL is given as %windir%\System32\Speech\Common\Sapi.dll

On Windows XP this is :

C:\Program Files\Common Files\Microsoft Shared\Speech. Is this location purely for Windows / Vista?


Additionally registered COM Dll's can be seen when adding a reference using VisualStudio, so there is no need to locate the DLL if it has been registered.

Computa_mike  Aug 13, 2010 
PDF Page 642
Real World box

In the More info secion, the book states :

Writing code that in turn writes code is complicated because you must write the generated code in IL. You don't need to know how to write IL for the 70-536 exam, and it's rarely required in real-world development scenarios, either. Therefore it is not discussed in detail here. For more information, read "Emitting Dynamic Methods and Assemblies" at http://msdn.microsoft.com/en-us/library/8ffc3x75.aspx, and "Generating Code at Run Time with Reflector.Emit" at http://www.ddj.com/windows/184416570.

but in the Real World section by Tony Northrup, Tony says :

In practice, it's generally easier to generate c# or Visual Basic .NET code and then use a compiler to generate an assembly. Writing IL directly is slow, error-prone and extremely difficult to troubleshoot. Be familiar with writing IL directly for the exam, but avoid it in the real world.

These 2 statements appear to contradict each other - primarily the book says that you don't need to know how to write IL for the exam, but Tony says that you do.

Also - the sample code provided so far is not in IL. from http://en.wikipedia.org/wiki/Common_Intermediate_Language here is some sample IL code :

.assembly Hello {}
.assembly extern mscorlib {}
.method static void Main()
{
.entrypoint
.maxstack 1
ldstr "Hello, world!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}


Computa_mike  Sep 09, 2010 
PDF Page 724
Lesson 2, 2nd Paragraph

Option A & B (the correct answers) do not fulfil the requirements of the question - PictureBox Control does have a method that will load an image from a file - the LOAD method - Therefore D is the correct answer.

Mike HIngley  Aug 06, 2010 
PDF Page 725
Lesson 3, question 2, options B,C,D

In option B, the enumeration can be instantiated, and it is possible to create an instance of it. Suggest removing the words (however it is an enumeration and you cannot create an instance of it).

In options C and D, the properties can be instantiated - or rather the underlying type of that property. While I would agree it is impossible to create an instance of a property - for example

dim x as New StringFormat.StringFormatFlags

won't work, but

Dim x As New Drawing.StringFormatFlags

does work.

Mike Hingley  Aug 06, 2010 
PDF Page 730
1st question

The answer C is marked as incorrect:
"C. Incorrect: Creating a separate application domain does not improve performance."

However, in the beginning of 8th chapter ia typed
"application domains are more efficient
than processes, enabling multiple assemblies to be run in separate application
domains without the overhead of starting separate processes"

Oleg Svarog  Mar 27, 2012 
Printed Page 740
the answer to Chapter 10, Lesson 2's Review question 1

On page 740, the answer to Chapter 10, Lesson 2's Review question 1 is incorrect.

Change:

1. Correct Answers: B, C, and D

To:

1. Correct Answers: B and C

and Change:

D. Correct: The Increment method is thread-safe regardless of whether you pass a parameter.

To:

D. Incorrect: The Increment method, although thread-safe, is a parameterless method. However, you can pass a parameter to the thread-safe IncrementBy method.

Anonymous  Dec 21, 2010 
PDF Page 741
Question 3 Answers

Question 3 asks about creating an application that responds to process new eventlog entries.

The Author (on page 434) shows an example of a WMI Event handler. The code creates a ManagementEventWatcher, creates an event handler, and uses addhandler to register the eventhandler to the ManagementEventWatcher.

Without this registration, there would be nothing to call the event handler.

The answers do not mention this handler.

Create an event watcher object
Register the ManagementEventWatcher.EventArrived handler

but nothing related to the handler.

Computa_mike  Aug 13, 2010