<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>IRhetoric - Karsten Januszewski   : .NET Framework 2.0 (Whidbey)</title><link>http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx</link><description>Tags: .NET Framework 2.0 (Whidbey)</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MSDN Wiki</title><link>http://blogs.msdn.com/karstenj/archive/2006/06/14/631478.aspx</link><pubDate>Thu, 15 Jun 2006 01:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:631478</guid><dc:creator>karstenj</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/karstenj/comments/631478.aspx</comments><wfw:commentRss>http://blogs.msdn.com/karstenj/commentrss.aspx?PostID=631478</wfw:commentRss><description>Wikis are only as good as the contributors, but &lt;A href="http://msdnwiki.microsoft.com/en-us/mtpswiki/default.aspx"&gt;the new MSDN wiki&lt;/A&gt; is already shaping up to be quite good.&amp;nbsp; There isn't any of the .NET 3.0 docs up there yet, but if you going online to get information about .NET 2.0, I'd go here so that you get both the "official" docs and then any community commentary all in one fell swoop.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=631478" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx">.NET Framework 2.0 (Whidbey)</category></item><item><title>Passing a preprocessor directive to MSBUILD via the command line instead of #DEFINE in code</title><link>http://blogs.msdn.com/karstenj/archive/2005/06/28/passing-a-preprocessor-directive-to-msbuild-via-the-command-line-instead-of-define-in-code.aspx</link><pubDate>Tue, 28 Jun 2005 23:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:433423</guid><dc:creator>karstenj</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/karstenj/comments/433423.aspx</comments><wfw:commentRss>http://blogs.msdn.com/karstenj/commentrss.aspx?PostID=433423</wfw:commentRss><description>&lt;P&gt;I recently wanted to pass a preprocessor directive (as in affecting /define in csc.exe) to MSBUILD on the commandline instead of using #DEFINE/#UNDEF in the source code or modifying the configuration properties in VS.&amp;nbsp; (After all, isn't that the idea of directives -- change them from the command line and don't mess with the source code?)&amp;nbsp; Here's how:&lt;/P&gt;
&lt;P&gt;Let's say I had in my code:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;#if DO_SOMTHING&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//do something&lt;BR&gt;#endif&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;I would call msbuild like this&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;msbuild /p:DefineConstants=DO_SOMETHING&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Beware that msbuild will not rebuild if only the directive changed, so you may also want to add /t:Rebuild&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;msbuild /p:DefineConstants=DO_SOMETHING /t:Rebuild&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=433423" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx">.NET Framework 2.0 (Whidbey)</category></item><item><title>WinForms Screen Saver Starter Kit in Whidbey (.NET 2.0)</title><link>http://blogs.msdn.com/karstenj/archive/2005/06/07/426354.aspx</link><pubDate>Tue, 07 Jun 2005 19:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:426354</guid><dc:creator>karstenj</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/karstenj/comments/426354.aspx</comments><wfw:commentRss>http://blogs.msdn.com/karstenj/commentrss.aspx?PostID=426354</wfw:commentRss><description>&lt;P&gt;Okay, I'm late to the party on this one, but I just came across the RSS Screen Saver Starter Kit in both the Visual Studio Express SKUs and VS2005.&amp;nbsp; Basically, when opening a new project, there is a "Starter Kit" node inside of which is a "Screen Saver" project. This will create everything you need to get started, with decents documentation too!&amp;nbsp;You can get a WinForms Screen Saver up very quickly.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;You can imagine why I'm interested -- time to start cranking out some gnarly Avalon Screen Savers...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=426354" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx">.NET Framework 2.0 (Whidbey)</category></item><item><title>FTP Sample Using Whidbey Updated (.NET Framework 2.0 Beta 2)</title><link>http://blogs.msdn.com/karstenj/archive/2005/05/12/416921.aspx</link><pubDate>Thu, 12 May 2005 19:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:416921</guid><dc:creator>karstenj</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/karstenj/comments/416921.aspx</comments><wfw:commentRss>http://blogs.msdn.com/karstenj/commentrss.aspx?PostID=416921</wfw:commentRss><description>&lt;P&gt;A few people pointed out &lt;A href="https://blogs.msdn.com/karstenj/archive/2004/11/30/272469.aspx"&gt;that my sample for uploading a bunch of images to an FTP site using Whidbey&lt;/A&gt; broke with Whidbey Beta 2, so I fixed it.&amp;nbsp; Basically, there were some semantic changes:&lt;/P&gt;
&lt;P&gt;--the FtpMethods enumeration moved to WebRequestMethods.Ftp.* &lt;/P&gt;
&lt;P&gt;--the FtpWebRequest.Binary property changed to FtpWebRequest.UseBinary&lt;/P&gt;
&lt;P&gt;Now &lt;A href="https://blogs.msdn.com/karstenj/archive/2004/11/30/272469.aspx"&gt;it works again&lt;/A&gt;!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=416921" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx">.NET Framework 2.0 (Whidbey)</category></item><item><title>FTP Sample Using Whidbey (.NET Framework 2.0 Beta 2)</title><link>http://blogs.msdn.com/karstenj/archive/2004/11/30/272469.aspx</link><pubDate>Tue, 30 Nov 2004 22:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272469</guid><dc:creator>karstenj</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/karstenj/comments/272469.aspx</comments><wfw:commentRss>http://blogs.msdn.com/karstenj/commentrss.aspx?PostID=272469</wfw:commentRss><description>&lt;DIV&gt;I recently needed to upload a bunch of images via FTP.&amp;nbsp; This gave me a perfect reason to write some code using the new FTP classes in Whidbey.&amp;nbsp; Very nice, I must say. Below is the source code for anyone needing to grab a directory and dump a bunch of files to an FTP site.&amp;nbsp;&amp;nbsp;&amp;nbsp;I write a&amp;nbsp;success and failure log file to cope with&amp;nbsp;an exceptions -- the way I write to the log is a bit clunky, but I was in a hurry!&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; #region Using directives&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;using System;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.IO;&lt;BR&gt;using System.Net;&lt;BR&gt;using System.Collections;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;namespace ImageFTPService&lt;BR&gt;{&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;class Program&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string directory = @"";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string server = @"";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string username = @"";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string password = @"";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string log_path_success = @"C:\logs\success.log";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const string log_path_fail = @"C:\logs\fail.log";&lt;BR&gt;&amp;nbsp;&amp;nbsp;private static int errCount = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;static void Main(string[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DirectoryInfo dir = new DirectoryInfo(directory);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileInfo[] infos = dir.GetFiles("*.*");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool IsSuccess = true;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (FileInfo fileInfo in infos)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (null != fileInfo)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IsSuccess = UploadFile(fileInfo);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!IsSuccess)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;errCount = errCount + 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (errCount &amp;gt; 100)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Waiting...");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Read();&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;static bool UploadFile(FileInfo fileInfo)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool IsSuccess = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;NetworkCredential credentials = new NetworkCredential(username, password);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string serverAddress = "ftp://" + server + "/Images/";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FtpWebRequest request = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FtpWebResponse response = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileStream fr = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request = (FtpWebRequest)FtpWebRequest.Create(new Uri(serverAddress + fileInfo.Name));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (StreamWriter sw3 = File.AppendText(log_path_fail))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw3.WriteLine(fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw3.WriteLine("-{0}", ex.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Fail: {0}", fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("-{0}", ex.Message);&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.Method = WebRequestMethods.Ftp.UploadFile;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.Credentials = credentials;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.UseBinary = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//read the image into a byte array using a FileStream&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byte[] fileContents = new byte[fileInfo.Length];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fr = fileInfo.OpenRead();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fr.Read(fileContents, 0, Convert.ToInt32(fileInfo.Length));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fr.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//get the FTP upload stream&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream requestStream = request.GetRequestStream();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//write the btye array to the stream&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requestStream.Write(fileContents, 0, fileContents.Length);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requestStream.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response = (FtpWebResponse)request.GetResponse();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (StreamWriter sw0 = File.AppendText(log_path_success))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw0.WriteLine(fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Success: {0}", fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (Exception e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (StreamWriter sw2 = File.AppendText(log_path_fail))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw2.WriteLine(fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw2.WriteLine("-{0}", e.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Fail: {0}", fileInfo.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("-{0}", e.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IsSuccess = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Threading.Thread.Sleep(5000);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return IsSuccess;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=272469" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/karstenj/archive/tags/.NET+Framework+2.0+_2800_Whidbey_2900_/default.aspx">.NET Framework 2.0 (Whidbey)</category></item></channel></rss>