Wednesday, February 27, 2008

VS 2008 and Visio AddIn Deployment Issues

I stumbled across an issue when I was working on a Visio AddIn Project in Microsoft Visual Studio 2008. It is very easy to create an AddIn for Microsoft Office Applications like Visio using the project templates available in Visual Studio (File > New > Project > Visual C# > Office > Visio 2007 Add-in). It becomes little tougher when we need to deploy this AddIn especially if it has multiple projects and data files. I went for ClickOnce deployment as it was easier as right clicking on the project and choosing 'Publish'. My AddIn had to read a data file while loading.

While installing this application on a client machine using ClickOnce, it never ask you for an installation path and it copies the files into two different folders with random names! Mine looked like this:

C:\Users\Administrator\AppData\Local\Apps\2.0\CA5NQ9ZB.N44\E6TLT686.69V\visi..vsto_11aeaa34550a68ee_0001.0000_14f3717c0aa57ea0
C:\Users\Administrator\AppData\Local\Apps\2.0\CA5NQ9ZB.N44\E6TLT686.69V\visi...dll_11aeaa34550a68ee_0001.0000_none_47ef10bd354219e1

And the frustrating thing is that all dlls gets copied to the first folder and the data files to the other. So my application never found the file it needed to load and I had no idea on how to solve this as the folder names kept changing randomly with every new deployment. I think these are some caching locations and the application dlls were not available anywhere else. Do anybody know what is happening here and what is the solution?

Finally I made my Deployment work by making the data file as an embedded resource (Properties > Build Action) and reading the data as below:

Stream resourceStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(MyNamespace.MyClass.MyFile.xml");

TextReader tr = new StreamReader(resourceStream);

Thursday, February 21, 2008

WayFormat: Source Code Color Formatter

There are lots of tools and ways to color format source code snippets so that they appear on blog posts and sites as they do in Visual Studio or other source editing tools. One of them is available at http://www.manoli.net/csharpformat/ which nicely formats the code to colorful HTML. But I was looking for a small desktop application that we can take along to use offline. Thankfully Manoli has provided the source code on the website for anyone to make use of it.



So, I made a small utility and named it WayFormat (Yeah… you guessed it right, the ‘Way’ comes from ‘Coolwayfarer’!). This standalone windows client application color formats the source code snippets in C, C++, C#, HTML, ASP, ASPX, XML,XAML, JScript, Java Script, Visual Basic, VB.Net, SQL, TSQL, PL/SQL and MSH (code name Monad) to style sheet enabled HTML code for publishing on a web site or in a blog. The tool has option to display line numbers, provide alternate line background color, and embed CSS.


Here is a sample code snippet formatted using WayFormat. I have hosted the css file at http://sameerct.googlepages.com/csharp.css and added a link tag in the head section of my blogger template pointing to this style sheet.


/// <summary>
/// Provides an option to save the CSS file.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnkCSS_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
try
{
FileInfo fileCSS = new FileInfo("csharp.css");

SaveFileDialog dlgCSS = new SaveFileDialog();
dlgCSS.FileName = "csharp.css";
dlgCSS.Filter = "Cascading Style Sheet|*.css";
dlgCSS.AddExtension = true;
dlgCSS.DefaultExt = "*.css";

if (dlgCSS.ShowDialog() == DialogResult.OK) fileCSS.CopyTo(dlgCSS.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

I have made the source code open and is hosted at CodePlex at http://www.codeplex.com/wayformat so that it is available to anyone interested to add more features or use it along with other applications. Download the executable or source code from CodePlex and use CodePlex Discussion Forum and Issue Tracker to post your comments or report any bugs you may find.

And well, there is an easier way to color format source code without using any tools. Copy paste your source code from Visual Studio to Microsoft Word and the save the word document as html web page. Now copy the content from web page (not the source) and paste directly in the blog post editor. It will look as below:

FileInfo fileCSS = new FileInfo("csharp.css");

See that the system classes like FileInfo are color coded too. :)