I recently checkout
NCover http://www.ncover.org/
NCover is a code coverage analysis tool for .NET applications that
gives line-by-line code coverage statistics.
This is an open source tool.
It generetes a nice graphical output about the functions used and not used.
You can see data like:
* how many times a function is called and
* start and end line numbers of the functions
* unused properties of assembly
You can find the beginner level tutorial at,
http://blog.dotnetwiki.org/archive/2004/07/15/594.aspx
Usually in .NET you end up writing code either in VB.NET or C# depending on your clients preferences.
So you usually end up in a situation where you know how to do something in C# but do not remember the syntax in VB.NET or viceversa.
Well I found the following article and I'm copying it here (I had some problems with the link so I decided to copy it).
I want to make clear that I DID NOT WROTE THIS because I do not want to take credit for other peoples work. and it was taken from http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html
"This is a quick reference guide to highlight some key syntactical differences between VB.NET (version 2) and C#. Hope you find this useful!
Thank you to Tom Shelton, Fergus Cooney, Steven Swafford and others for your contributions. "
|
Imports System Namespace Hello Class HelloWorld Overloads Shared Sub Main(ByVal args() As String) Dim name As String = "VB.NET" If args.Length = 1 Then name = args(0) Console.WriteLine("Hello, " & name & "!") End Sub End Class End Namespace |
using System; namespace Hello { public class HelloWorld { public static void Main(string[] args) { string name = "C#"; if (args.Length == 1) name = args[0]; Console.WriteLine("Hello, " + name + "!"); } } } |
|
|
|
|
Boolean Byte Char Short, Integer, Long Single, Double Decimal Date
Object String
Dim x As Integer Console.WriteLine(x.GetType()) Console.WriteLine(GetType(Integer)) Console.WriteLine(TypeName(x))
Dim d As Single = 3.5 Dim i As Integer = CType(d, Integer) i = CInt(d) i = Int(d)
|
bool byte, sbyte char short, ushort, int, uint, long, ulong float, double decimal DateTime
object string
int x; Console.WriteLine(x.GetType()); Console.WriteLine(typeof(int)); Console.WriteLine(x.GetType().Name);
float d = 3.5f; int i = (int)d;
|
|
Const MAX_STUDENTS AsInteger = 25
ReadOnly MIN_DIAMETER As Single = 4.93
|
constint MAX_STUDENTS = 25;
readonly float MIN_DIAMETER = 4.93f;
|
|
Enum Action Start [Stop] Rewind Forward End Enum Enum Status Flunk = 50 Pass = 70 Excel = 90 End Enum Dim a As Action = Action.Stop If a <> Action.Start Then _ Console.WriteLine(a.ToString & " is " & a) Console.WriteLine(Status.Pass) Console.WriteLine(Status.Pass.ToString()) |
enum Action {Start, Stop, Rewind, Forward}; enum Status {Flunk = 50, Pass = 70, Excel = 90}; Action a = Action.Stop; if (a != Action.Start) Console.WriteLine(a + " is " + (int) a); Console.WriteLine((int) Status.Pass); Console.WriteLine(Status.Pass); |
|
= < > <= >= <>
+ - * / Mod \ ^
= += -= *= /= \= ^= <<= >>= &=
And Or Not << >>
AndAlso OrElse And Or Xor Not
Note: AndAlso and OrElse perform short-circuit logical evaluations
& +
|
== < > <= >= !=
+ - * / % / Math.Pow(x, y)
= += -= *= /= %= &= |= ^= <<= >>= ++ --
& | ^ ~ << >>
&& || & | ^ !
Note: && and || perform short-circuit logical evaluations
+
|
|
greeting = IIf(age < 20, "What's up?", "Hello")
If age < 20 Then greeting = "What's up?" If age < 20 Then greeting = "What's up?" Else greeting = "Hello"
If x <> 100 And y < 5 Then x *= 5 : y *= 2
If x <> 100 And y < 5 Then x *= 5 y *= 2 End If
If whenYouHaveAReally < longLine And _ itNeedsToBeBrokenInto2 > Lines Then _ UseTheUnderscore(charToBreakItUp)
If x > 5 Then x *= y ElseIf x = 5 Then x += y ElseIf x < 10 Then x -= y Else x /= y End If
Select Case color Case "pink", "red" r += 1 Case "blue" b += 1 Case "green" g += 1 Case Else other += 1 End Select
|
greeting = age < 20 ? "What's up?" : "Hello";
if (age < 20) greeting = "What's up?"; else greeting = "Hello";
if (x != 100 && y < 5) { x *= 5; y *= 2; }
if (x > 5) x *= y; else if (x == 5) x += y; else if (x < 10) x -= y; else x /= y;
switch (color) { // Must be integer or string case "pink": case "red": r++; break; case "blue": b++; break; case "green": g++; break; default: other++; break; }
|
|
|
While c < 10 c += 1 End While |
Do Until c = 10 c += 1 Loop
|
Do While c < 10 c += 1 Loop |
For c = 2 To 10 Step 2 Console.WriteLine(c) Next
|
|
Do c += 1 Loop While c < 10 |
Do c += 1 Loop Until c = 10 |
Dim names As String() = {"Fred", "Sue", "Barney"} For Each s As String In names Console.WriteLine(s) Next
Dim i As Integer = 0 While (True) If (i = 5) Then Exit While i += 1 End While
For i = 0 To 4 If i < 4 Then Continue For Console.WriteLine(i) Next
|
while (c < 10) c++; for (c = 2; c <= 10; c += 2) Console.WriteLine(c);
do c++; while (c < 10); string[] names = {"Fred", "Sue", "Barney"}; foreach (string s in names) Console.WriteLine(s);
int i = 0; while (true) { if (i == 5) break; i++; }
for (i = 0; i < 5; i++) { if (i < 4) continue; Console.WriteLine(i); }
|
|
Dim nums() As Integer = {1, 2, 3} For i As Integer = 0 To nums.Length - 1 Console.WriteLine(nums(i)) Next Dim names(4) As String names(0) = "David" names(5) = "Bobby" ReDim Preserve names(6)
Dim twoD(rows-1, cols-1) As Single twoD(2, 0) = 4.5 Dim jagged()() As Integer = { _ New Integer(4) {}, New Integer(1) {}, New Integer(2) {} } jagged(0)(4) = 5
|
int[] nums = {1, 2, 3}; for (int i = 0; i < nums.Length; i++) Console.WriteLine(nums[i]); string[] names = new string[5]; names[0] = "David"; names[5] = "Bobby"; string[] names2 = new string[7]; Array.Copy(names, names2, names.Length);
float[,] twoD = new float[rows, cols]; twoD[2,0] = 4.5f;
int[][] jagged = new int[3][] { new int[5], new int[2], new int[3] }; jagged[0][4] = 5;
|
|
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer) x += 1 y += 1 z = 5 End Sub
Dim a = 1, b = 1, c As Integer TestFunc(a, b, c) Console.WriteLine("{0} {1} {2}", a, b, c)
Function Sum(ByVal ParamArray nums As Integer()) As Integer Sum = 0 For Each i As Integer In nums Sum += i Next End Function Dim total As Integer = Sum(4, 3, 2, 1)
Sub SayHello(ByVal name As String, Optional ByVal prefix As String = "") Console.WriteLine("Greetings, " & prefix & " " & name) End Sub SayHello("Strangelove", "Dr.") SayHello("Madonna")
|
void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; }
int a = 1, b = 1, c; // c doesn't need initializing TestFunc(a, ref b, out c); Console.WriteLine("{0} {1} {2}", a, b, c);
int Sum(params int[] nums) { int sum = 0; foreach (int i in nums) sum += i; return sum; }
int total = Sum(4, 3, 2, 1); // returns 10
void SayHello(string name, string prefix) { Console.WriteLine("Greetings, " + prefix + " " + name); } void SayHello(string name) { SayHello(name, ""); }
|
|
vbCrLf, vbCr, vbLf, vbNewLine vbNullString vbTab vbBack vbFormFeed vbVerticalTab ""
Dim school As String = "Harding" & vbTab school = school & "University"
Dim letter As Char = school.Chars(0) letter = Convert.ToChar(65) letter = Chr(65) Dim word() As Char = school.ToCharArray()
Dim msg As String = "File is c:\temp\x.dat"
Dim mascot As String = "Bisons" If (mascot = "Bisons") Then If (mascot.Equals("Bisons")) Then If (mascot.ToUpper().Equals("BISONS")) Then If (mascot.CompareTo("Bisons") = 0) Then
Console.WriteLine(mascot.Substring(2, 3))
If ("John 3:16" Like "Jo[Hh]? #:*") Then
Imports System.Text.RegularExpressions Dim r As New Regex("Jo[hH]. \d:*") If (r.Match("John 3:16").Success) Then
Dim dt As New DateTime(1973, 10, 12) Dim s As String = "My birthday: " & dt.ToString("MMM dd, yyyy")
Dim buffer As New System.Text.StringBuilder("two ") buffer.Append("three ") buffer.Insert(0, "one ") buffer.Replace("two", "TWO") Console.WriteLine(buffer)
|
\n, \r \t \\ \"
string school = "Harding\t"; school = school + "University";
char letter = school[0]; letter = Convert.ToChar(65); letter = (char)65; char[] word = school.ToCharArray();
string msg = @"File is c:\temp\x.dat"; string msg = "File is c:\\temp\\x.dat";
string mascot = "Bisons"; if (mascot == "Bisons") if (mascot.Equals("Bisons")) if (mascot.ToUpper().Equals("BISONS")) if (mascot.CompareTo("Bisons") == 0)
Console.WriteLine(mascot.Substring(2, 3));
using System.Text.RegularExpressions; Regex r = new Regex(@"Jo[hH]. \d:*"); if (r.Match("John 3:16").Success)
DateTime dt = new DateTime(1973, 10, 12); string s = "My birthday: " + dt.ToString("MMM dd, yyyy");
System.Text.StringBuilder buffer = new System.Text.StringBuilder("two "); buffer.Append("three "); buffer.Insert(0, "one "); buffer.Replace("two", "TWO"); Console.WriteLine(buffer);
|
|
Dim ex As New Exception("Something is really wrong.") Throw ex
Try y = 0 x = 10 / y Catch ex As Exception When y = 0 Console.WriteLine(ex.Message) Finally Beep() End Try
On Error GoTo MyErrorHandler ... MyErrorHandler: Console.WriteLine(Err.Description)
|
Exception up = new Exception("Something is really wrong."); throw up;
try { y = 0; x = 10 / y; } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Microsoft.VisualBasic.Interaction.Beep(); }
|
|
Namespace Harding.Compsci.Graphics ... End Namespace
Namespace Harding Namespace Compsci Namespace Graphics ... End Namespace End Namespace End Namespace
Imports Harding.Compsci.Graphics
|
namespace Harding.Compsci.Graphics { ... }
namespace Harding { namespace Compsci { namespace Graphics { ... } } }
using Harding.Compsci.Graphics;
|
|
Public Private Friend Protected Protected Friend Shared
Class FootballGame Inherits Competition ... End Class
Interface IAlarmClock ... End Interface
Interface IAlarmClock Inherits IClock ... End Interface
Class WristWatch Implements IAlarmClock, ITimer ... End Class
|
public private internal protected protected internal static
class FootballGame : Competition { ... }
interface IAlarmClock { ... }
interface IAlarmClock : IClock { ... }
class WristWatch : IAlarmClock, ITimer { ... }
|
|
Class SuperHero Private _powerLevel As Integer Public Sub New() _powerLevel = 0 End Sub Public Sub New(ByVal powerLevel As Integer) Me._powerLevel = powerLevel End Sub Protected Overrides Sub Finalize() MyBase.Finalize() End Sub End Class |
class SuperHero { private int _powerLevel; public SuperHero() { _powerLevel = 0; } public SuperHero(int powerLevel) { this._powerLevel= powerLevel; } ~SuperHero() { } }
|
|
Dim hero As SuperHero = New SuperHero Dim hero As New SuperHero
With hero .Name = "SpamMan" .PowerLevel = 3 End With
hero.Defend("Laura Jones") hero.Rest() SuperHero.Rest()
Dim hero2 As SuperHero = hero hero2.Name = "WormWoman" Console.WriteLine(hero.Name)
hero = Nothing
If hero Is Nothing Then _ hero = New SuperHero
Dim obj As Object = New SuperHero If TypeOf obj Is SuperHero Then _ Console.WriteLine("Is a SuperHero object.")
Using reader As StreamReader = File.OpenText("test.txt") Dim line As String = reader.ReadLine() While Not line Is Nothing Console.WriteLine(line) line = reader.ReadLine() End While End Using
|
SuperHero hero = new SuperHero();
hero.Name = "SpamMan"; hero.PowerLevel = 3;
hero.Defend("Laura Jones"); SuperHero.Rest();
SuperHero hero2 = hero; hero2.Name = "WormWoman"; Console.WriteLine(hero.Name);
hero = null ;
if (hero == null) hero = new SuperHero();
Object obj = new SuperHero(); if (obj is SuperHero) Console.WriteLine("Is a SuperHero object.");
using (StreamReader reader = File.OpenText("test.txt")) { string line; while ((line = reader.ReadLine()) != null) Console.WriteLine(line); } |
|
Structure StudentRecord Public name As String Public gpa As Single Public Sub New(ByVal name As String, ByVal gpa As Single) Me.name = name Me.gpa = gpa End Sub End Structure
Dim stu As StudentRecord = New StudentRecord("Bob", 3.5) Dim stu2 As StudentRecord = stu stu2.name = "Sue" Console.WriteLine(stu.name) Console.WriteLine(stu2.name)
|
struct StudentRecord { public string name; public float gpa; public StudentRecord(string name, float gpa) { this.name = name; this.gpa = gpa; } }
StudentRecord stu = new StudentRecord("Bob", 3.5f); StudentRecord stu2 = stu; stu2.name = "Sue"; Console.WriteLine(stu.name); Console.WriteLine(stu2.name);
|
|
Private _size As Integer Public Property Size() As Integer Get Return _size End Get Set (ByVal Value As Integer) If Value < 0 Then _size = 0 Else _size = Value End If End Set End Property
foo.Size += 1
|
private int _size; public int Size { get { return _size; } set { if (value < 0) _size = 0; else _size = value; } }
foo.Size++;
|
|
Delegate Sub MsgArrivedEventHandler(ByVal message As String)
Event MsgArrivedEvent As MsgArrivedEventHandler
Event MsgArrivedEvent(ByVal message As String)
AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback RaiseEvent MsgArrivedEvent("Test message") RemoveHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback
Imports System.Windows.Forms
Dim WithEvents MyButton As Button MyButton = New Button
Private Sub MyButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyButton.Click MessageBox.Show(Me, "Button was clicked", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub
|
delegate void MsgArrivedEventHandler(string message);
event MsgArrivedEventHandler MsgArrivedEvent;
MsgArrivedEvent += new MsgArrivedEventHandler(My_MsgArrivedEventCallback); MsgArrivedEvent("Test message"); MsgArrivedEvent -= new MsgArrivedEventHandler(My_MsgArrivedEventCallback);
using System.Windows.Forms;
Button MyButton = new Button(); MyButton.Click += new System.EventHandler(MyButton_Click);
private void MyButton_Click(object sender, System.EventArgs e) { MessageBox.Show(this, "Button was clicked", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); }
|
|
Console.Write("What's your name? ") Dim name As String = Console.ReadLine() Console.Write("How old are you? ") Dim age As Integer = Val(Console.ReadLine()) Console.WriteLine("{0} is {1} years old.", name, age) Console.WriteLine(name & " is " & age & " years old.") Dim c As Integer c = Console.Read() Console.WriteLine(c)
|
Console.Write("What's your name? "); string name = Console.ReadLine(); Console.Write("How old are you? "); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("{0} is {1} years old.", name, age); Console.WriteLine(name + " is " + age + " years old.");
int c = Console.Read(); Console.WriteLine(c);
|
|
Imports System.IO
Dim writer As StreamWriter = File.CreateText("c:\myfile.txt") writer.WriteLine("Out to file.") writer.Close()
Dim reader As StreamReader = File.OpenText("c:\myfile.txt") Dim line As String = reader.ReadLine() While Not line Is Nothing Console.WriteLine(line) line = reader.ReadLine() End While reader.Close()
Dim str As String = "Text data" Dim num As Integer = 123 Dim binWriter As New BinaryWriter(File.OpenWrite("c:\myfile.dat")) binWriter.Write(str) binWriter.Write(num) binWriter.Close()
Dim binReader As New BinaryReader(File.OpenRead("c:\myfile.dat")) str = binReader.ReadString() num = binReader.ReadInt32() binReader.Close()
|
using System.IO;
StreamWriter writer = File.CreateText("c:\\myfile.txt"); writer.WriteLine("Out to file."); writer.Close();
StreamReader reader = File.OpenText("c:\\myfile.txt"); string line = reader.ReadLine(); while (line != null) { Console.WriteLine(line); line = reader.ReadLine(); } reader.Close();
string str = "Text data"; int num = 123; BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat")); binWriter.Write(str); binWriter.Write(num); binWriter.Close();
BinaryReader binReader = new BinaryReader(File.OpenRead("c:\\myfile.dat")); str = binReader.ReadString(); num = binReader.ReadInt32(); binReader.Close();
|
Migrating C++ code from Win32 to managed code can be quite complex, specially if you have a lot of Win32 code of GUI code.
I copying some links here that will be of help during this task
The following link gives an introduction to managed C++:
Introduction to Managed C++From that article:
"
Here are some specific advantages of MC++:
- The best performance of generated IL code because of both optimizations of
the generated IL and less IL generated (as discussed in the previous section).
This is specifically because MC++ is the only .NET compiler with a full
optimizer back end, which is pretty much the same one that is used by the
unmanaged compiler.
- MC++ is your language of choice if you want full control of the .NET
environment:
- Allows one to use all seven levels of CTS member access. C# allows only six.
- Allows direct access to interior
gc
pointers, useful in a whole
class of system applications such as system and .NET utilities.
- Offers explicit control of expensive operations like boxing.
- Supports multiple indexed properties on a type, unlike C#.
- MC++ is currently the only managed language that allows you to mix unmanaged
and managed code, even in the same file. This leads to several other points:
- Allows a developer to keep performance-critical portions of the code in
native code.
- Gives seamless access to all unmanaged libraries, such as DLLs,
statically-linked libraries, COM objects, template libraries, and more.
- Leverages existing investments in C++ programming skills and legacy C++
code.
- Porting unmanaged code to .NET: MC++ allows you to take existing unmanaged
code and compile it to managed code (with the
/clr
compiler switch
and IJW).
- Gives the ability to port code at one's own rate rather than re-write all at
once.
- Provides the easiest way to add .NET support to your existing native C++
Windows applications, by allowing you to bridge the gap between the two
environments with as little work on your behalf as possible, and with the lowest
performance penalty.
- MC++ is currently the only language that allows some form of multi-paradigm
design and development with full support for generic programming and templates.
This can lead to more options and better designs and implementations.
Disadvantages of Managed C++
- C++ is a more complex language than C# in both its syntax and areas where
one could get into trouble. Since MC++ follows the C++ paradigm of "explicit is
good", some MC++ constructs may seem really ugly. For simpler types of
applications, and with certain types of developers, it may make more sense to
use C#.
- Managed C++ code is non-verifiable, since C++ can perform unsafe operations.
The implication of this is that MC++ code may not run in restricted environments
that will not run code that is non-verifiable.
- Some minor features of the .NET platform are not supported yet, such as
Jagged Arrays.
- IDEsupport is currently lacking, compared to other managed languages, since
there's little or no designer support (but Everett will change this).
- "
#using mscorlib.dll;
// required for MC++
void main()
{
System::Console::WriteLine(S"Managed C++ Rocks!!");
}
This other article explains how the different mixes you can make with managed and unmanaged code:
Intro to C++ Managed Code And this article
Microsoft Win32 to Microsoft .NET Framework API MapGives a map for your APIs that can be very helpful
Recently I was in the need to PATCH an xml. I had a program that generated an XML that was input to other program.
My problem was that there were some particular changes I needed to do to my XML but they could need to be redone If i regenerated my XML, so how could I automate that. I could not find an easy tool to do that so I built one and here it is:
It uses the XML facilities in .NET and it is a quick and dirty implementation. It allows you to Comment tags, to remove them or to add tags and also attributes
Here is a sample input file
<?xml
version="1.0"
encoding="utf-8"
?>
<PatchesInfo
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">>
<!-- Sample Patch
-->
<Patches>
<Patch
forAttribute="false">
<Type>Apply</Type>
<Content>
<![CDATA[ <ADDEDTAG/>]]>
</Content>
<XPathLocation>//MyData[@name='Entry1']/MyAttribytes/Attribute[@name='Att58']/Annotations</XPathLocation>
</Patch>
<!--
Commenting -->
<Patch
forAttribute="false">
<Type>Comment</Type>
<Content>
<![CDATA[** This part with be put on top of the comment entry ** ]]>
</Content>
<XPathLocation>//MyData[@name='Entry1']/MyAttribytes/Attribute[@name='Att59']/Annotations</XPathLocation>
</Patch>
using
System;
using
System.IO;
using
System.Collections.Generic;
using
System.Text;
using
System.Xml;
using
System.Xml.Serialization;
using
System.Diagnostics;
namespace XMLPatcher
{
// Set this 'Customer' class as the root node
// of any XML file its serialized to.
[XmlRootAttribute("PatchesInfo",
Namespace = "", IsNullable =
false)]
public class
Patches
{
///
<summary>
/// Default
constructor for this class
/// (required for
serialization).
///
</summary>
public Patches()
{
}
[XmlArray("Patches"),XmlArrayItem("Patch",typeof(Patch))]
public System.Collections.ArrayList
patches = new System.Collections.ArrayList();
}
public class
Patch
{
// Set this 'bool' field
// to be an attribute of the root node.
[XmlAttributeAttribute]
public bool
forAttribute = false;
// By NOT specifing any custom
// Metadata Attributes, fields will be created
//
as an element by default.
[XmlElement]
public string
Type;
[XmlElement]
public string
Content;
[XmlElement]
public string
XPathLocation;
}
static class
XmlPatcher
{
public static
void Patch(string
patchFilename,string inputFilename,string
outputFilename)
{
Patches p = new
Patches();
XmlSerializer serializer =
new XmlSerializer(typeof(Patches));
TextReader reader = new
StreamReader(patchFilename);
p = (Patches)serializer.Deserialize(reader);
reader.Close();
XmlDocument doc = new
XmlDocument();
doc.Load(inputFilename);
foreach (Patch
patch in p.patches)
{
if
(patch.forAttribute)
{
if (patch.Type.Equals("Change"))
{
XmlAttribute node = doc.SelectSingleNode(patch.XPathLocation)
as XmlAttribute;
node.Value = patch.Content;
}
else
if (patch.Type.Equals("Apply"))
{
XmlAttribute node =
doc.SelectSingleNode(patch.XPathLocation) as
XmlAttribute;
XmlDocument temp =
new XmlDocument();
temp.LoadXml(patch.Content);
node.AppendChild(doc.ImportNode(temp.ChildNodes[0],
true));
//doc.RemoveChild(node);
}
else
if
(patch.Type.Equals("ApplyAllElements"))
{
XmlAttribute
node = doc.SelectSingleNode(patch.XPathLocation) as
XmlAttribute;
doc.RemoveChild(node);
}
else
Debug.Fail("Invalid
path type for an attribute");
}
else
{
//For elements
XmlNodeList elements =
doc.SelectNodes(patch.XPathLocation);
foreach (XmlElement
element in elements)
{
if (patch.Type.Equals("Apply"))
{
XmlDocument temp =
new XmlDocument();
temp.LoadXml(patch.Content);
element.AppendChild(doc.ImportNode(temp.ChildNodes[0],
true));
}
else if (patch.Type.Equals("Remove"))
{
element.ParentNode.RemoveChild(element);
}
else if (patch.Type.Equals("Comment"))
{
XmlComment comment =
doc.CreateComment(patch.Content + "\r\n" +
element.OuterXml + "\r\n ********");
element.ParentNode.ReplaceChild(comment, element);
}
}
}
}
doc.Save(outputFilename);
Console.WriteLine("File
" + inputFilename + " has been patched.
Results in " + outputFilename);
}
}
class Program
{
///
<summary>
/// Reads a Patches
document. This document has the following form:
///
<Patches>
///
<Patch xpath="...">
/// new xml
///
</Patch>
///
</Patches>
///
</summary>
///
<param name="args"></param>
public static
void Main(string[]
args)
{
XmlPatcher.Patch(args[0], args[1],
args[2]);
Console.WriteLine("File
" + args[1] + " has been patched. Results in "
+ args[2]);
}
}
}
If you are a MSDN subscriber, you have access to Virtual Machine images that are preconfigured with most Microsoft’s products:
MSDN Subscribers have access to a series of Virtual Images containing a fully functional installation of Windows Server 2003, SQL Server 2005, Visual Studio 2005 Team Suite, and Visual Studio 2005 Team Foundation Server. These Virtual Images are a benefit of your MSDN subscription and are available for download from the MSDN Subscriber download area.
I copied the paragraph above from Visual Studio’s Evaluation page. You do need to have an MSDN subscription to access these images. They are a great way to evaluate Microsoft’s products without commiting a physical machine to the evaluation, or having to spend time installing and configuring a server.
This is another great example of how virtualization is making our lives easier!
The VHD format specification is now available for download. The specification contains all the technical details for reading/writing and modifying VHD images. This has a lot of potential, and can be used for things like backup, antivirus scans, image management, disk conversion, and others. The spec was released under Microsoft’s Open Specification Promise:
As of Tuesday, October 17th 2006, Microsoft is providing access to the VHD Image Format Specification Document as a part of the Open Specification Promise (OSP). The OSP provides broad use of Microsoft patented technology necessary to implement a list of covered specifications. The goal of the OSP is to provide our customers and partners with additional options for implementing interoperable solutions. Please reference the OSP Website for complete details.
Link to the Press Release: Microsoft Enhances Interoperability With Open Virtualization Format
Link to download page: Virtual Hard Disk Image Format Specification
I recenlty had a hard time trying to return some cursos and used them in Excel.
The problem is that Excel does not understand ref cursors. There are a couple of links in Microsoft. In general you have to use a special ODBC query syntax and create a package ????
This is an example, I just copied from Microsoft
DROP TABLE DATA1;
CREATE TABLE DATA1
(ssn NUMBER(9) PRIMARY KEY,
fname VARCHAR2(15),
lname VARCHAR2(20));
INSERT INTO DATA1 VALUES(555662222,'Sam','Goodwin');
INSERT INTO DATA1 VALUES(555882222,'Kent','Clark');
INSERT INTO DATA1 VALUES(666223333,'Sally','Burnett');
COMMIT;
/
CREATE OR REPLACE PACKAGE packData1
AS
TYPE tssn is TABLE of NUMBER(10)
INDEX BY BINARY_INTEGER;
TYPE tfname is TABLE of VARCHAR2(15)
INDEX BY BINARY_INTEGER;
TYPE tlname is TABLE of VARCHAR2(20)
INDEX BY BINARY_INTEGER;
PROCEDURE GetData
(param1 IN Date,
ssn OUT tssn,
fname OUT tfname,
lname OUT tlname);
END packData1;
/
CREATE OR REPLACE PACKAGE BODY packData1
AS
PROCEDURE GetData
(param1 IN Date,
ssn OUT tssn,
fname OUT tfname,
lname OUT tlname)
IS
CURSOR data1_cur IS
SELECT ssn, fname, lname
FROM Data1
WHERE param1 < current_date;
percount NUMBER DEFAULT 1;
BEGIN
FOR singledata IN data1_cur
LOOP
ssn(percount) := singledata.ssn;
fname(percount) := singledata.fname;
lname(percount) := singledata.lname;
percount := percount + 1;
END LOOP;
END;
END;
/
To call it you write in Excel something like {call packdata1.GetData('01-JAN-2005',{resultset 70000, ssn, fname, lname})}
{call packdata1.GetData(?,{resultset 70000, ssn, fname, lname})} to use parameters.
The microsoft links are:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q174679
http://www.support.microsoft.com/kb/174981
When you try to mount a VHD using the vhdmount tool, you may get this error message:
C:\VMs>vhdmount.exe /m DISK.vhd
The VHD file is successfully plugged in as a virtual disk device. However, VHD mount was unable to mount all volumes on the disk. Use Disk Manager to mount the volumes.
The issue is that the drivers are not signed for WHQL, so you need to follow the same steps as detailed in this blog post to make it work (as in Windows XP). Another option, however, is to set the WHQL signing option is to Ignore. This can be done through Control Panel->System->Hardware->Driver Signing:
Once you do this, you’ll be able to mount VHD files without any further errors.
There’s going to be a new
Recently someone I one told me he was working with WebParts and that he was not happy about it.
Developing WebParts is that hard but is even easier if you are familiar with simple web user controls.
Some people from Reflection IT created a WebPart that allows you to reuse your web user controls. So I think it will very useful for anyone that is just starting with this
Just look for
SmartPartCheers!
If you are starting to develop Asp.net
application with Visual Studio 2005 and learning about the thousands
of new cool features of asp.net 2.0 you will find that the
compilation model is really different.
To me was very
confusing in the beginning understand the new compilation model or
features. Playing around -before reading documentaion first- I find that there some command line tools that
you can use to understand the different ways to do it, however it's
difficult to understand if you don't read the new compilation model
documentation.
I want to share about a tool I used since I
found it, it's called West
Wind Web ASP.NET 2.0 Compiler Utility, it's very
simple to use and in my case, it helps me to understand better the
compilation options I have with the asp.net 2.0 model.
So give
it a try and I hope you like it.
During our VT labs, we are constantly messing around with domain controllers due to the fact that in order for Virtual Server's API and Carmine to work correctly, the hosts need to be on the same domain.
Everything has worked quite fine until a day in which we were trying to add a machine the domain we had. I got the following message:
The system cannot log you on due to the following error:
The specified domain either does exist or could not be contacted.
Please try again or consult your system administrator.
Hmmm...well...trying again certainly did not work and we are our own sys admins ;) I sent a desperate cry for help to our awesome Virtua team, and
Jose hinted me on how to fix it.
All it takes is to change the
Primary DNS of the machine that won't logon to the
IP address of the domain controller. Doing this fixed the issue.
As far as why this works, I really don't know and to a certain extent, I am not sure I want to. :D
Hope this helps someone in distress in the future!
My coworker Hendel Valverde will be presenting a webcast called Complete Methodology for Migrating Microsoft Visual Basic 6.0 to Visual Basic .NET, tomorrow at 1:00 PM Pacific. It covers all the steps necessary to prepare and perform migrations from VB to VB.NET, from what to look for during the analysis and planning stages to the final testing of the migrated application.
Link: MSDN Webcast: Complete Methodology for Migrating Microsoft Visual Basic 6.0 to Visual Basic .NET (Level 200)
And here’s the link to ArtinSoft’s press release: ArtinSoft and Microsoft Announce New Webcast on VB6 to .NET 2005 Migration Methodology.
Virtual PC 2007 Beta is now available for download from http://connect.microsoft.com. As with other beta software, you need to register for the beta first.
This is a long overdue upgrade that finally supports hardware virtualization. It includes:
- Hardware-assisted virtualization (both AMD and Intel)
- Support for Vista both as host and guest OS
- Support for 64–bit Hosts
- Bug Fixes and Performance Enhacements
Some of you may recall that on some events, we got an error message on Intel Thread Checker during the Multicore lab. No matter what we did, even if we solved all the concurrency issues related to our code, the Thread Checker would always log this message:
Write -> Read data-race Memory read at [PrimesInstrumented.exe, 0x2468] conflicts with a prior memory write at [PrimesInstrumented.exe, 0x16816] (flow dependence)
During the labs, we have said that we've been working out the solution with the Intel support people - and now we have an answer!!The thing is that you can work with Thread Checker in two ways:
- Use compiler based instrumentation. With this, you basically need to add the /Qtcheck flag to the compiler command line to instrument the binary. Once it is instrumented and you run it, it will create a file called "Threadchecker.thr", that you can then load in the VTune Thread Checker. To do this, you need to use the following command lines: (using the primes example from the lab)
icl /c /Zi primes.cpp /Qopenmp /Qtcheck /Od
link primes.obj /out:PrimesInstrumented.exe /fixed:no /DEBUG
- Use Thread Checker to intrument the application. In this scenario, you don't intrument the binary at compile time, but have Thread Checker intrument it when running the application. For this, you need to build the application with the following command lines:
icl /c /Zi primes.cpp /Qopenmp /MD /Od
link primes.obj /out:PrimesInstrumented.exe /fixed:no /DEBUG
And then load it in Thread Checker.
The error we were doing on the lab is that we were using both compiler and "Thread Checker" instrumentation, and that caused Thread Checker to report conflicts that are outside of the program and in the runtime libraries. Now, using either option (BUT not both at the same time) the strange error is gone!
Thanks to Vasanth Tovinkere at Intel who really helped us out with this problem!!
BTW, this is repeating an old blog post I did for the 64–bit Advantage Blog. The post was deleted for some reason. Since I consider this information to be important, I am re-posting it here.
The description of the picture
You can create C++ application in Visual Studio that use OpenMP. When you run an application created with OpenMP and VS.NET, however, you may get this annoying error message: “This application has failed to start because vcompd.dll was not found. Re-installing the application may fix this problem.”:
When we tried this, we were puzzled by this error message, especially since it works with the Intel Compiler flawlessly. Well, it turns out that you need to include omp.h in your files ALWAYS when you use OpenMP from Visual Studio. This is not required on other compilers if you’re only using the OpenMP pragmas, but it is an issue with Visual Studio.
Thanks to Kang Su for pointing this out in his blog – I was going crazy trying to figure out what was wrong.
Also remember to enable OpenMP support in the C++ Project properties. This setting is in Configuration Properties->C/C++->Language->OpenMP Support.
If you have been using VMWare for a while you'll end up having space problems.
Either your virtual machine disks are TOO big or TOO small.
To handle that VMWare Workstation has a tool (Notice that VMWare Server does not have it)
Called vmware-vdiskmanager.exe (Virtual Disk Manager you can google it with "Virtual Disk Manager vmware")
you will find it in C:\Program Files\VmWare WorkStation\
to Expand a Disk you just do vmware-vdiskmanager.exe -x 40GB mydisk.vmdsk
To Shrink files there are more steps to take. You must remove all snapshots if you had any. Then start the virtual machine, and install the vmwareTools and once you have installed then you go to the control panel Click in Vmware Tools and use the Shrinking features.
Then you can use the vmware-vdiskmanager.exe -k command.
You can find more details intructions in the VMWare site! Good Luck
So there is a quick hack method you can use to catch alignment exceptions on your code, but this approach - although effective, is not a very elegant solution.
It turns out that VTune can help you find alignment faults very easily. I tested VTune using my MacBook running Windows XP and it had an event called:
Misaligned Data Memory References
By focusing on these events, you can find places in your code where alignment faults are happening. No more guessing, no more hacks, plain and simple.
On some processors, this event counter might not be present. In cases like this, you would need to focus on the Split Stores Retired and Split Loads Retired events to find this information.
We have added this extra information on our VTune labs as part of
Artinsoft's continuing effort to support in-house customized
64-bit training .
Are you wondering what's Microsoft support policy for Visual Basic 6? Here is the information:
Link to Microsoft Support Lifecycle