<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>David Woods</title>
        <link>http://haveyougotwoods.com/Default.aspx</link>
        <description>Security, Tips, Tricks, Beer</description>
        <language>en-US</language>
        <copyright>Dave Woods</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>David Woods</title>
            <url>http://haveyougotwoods.com/images/RSS2Image.gif</url>
            <link>http://haveyougotwoods.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Going Digital At Home - Part 3 - The Law</title>
            <category>General</category>
            <category>Internet Law</category>
            <link>http://haveyougotwoods.com/archive/2010/07/06/312.aspx</link>
            <description>One of the things I never took much time to consider was the legality off all this. My opinion has been (and hopefully always will be) that if I purchased something I should be able to do whatever I want with it. If I own DVD and want to use it as a decoration on my Christmas tree I feel I have that right. &lt;br /&gt;
&lt;br /&gt;
Again, I am not a lawyer and this is just a summation of my research on the topic so do your own research for your own area.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;DVD Backups&lt;/span&gt;&lt;br /&gt;
The first debate is if you can backup or convert your DVD's to another format. There are two big points in this debate. The first is if you can make a backup of the media. The second is if you can legally circumvent copy protection. In Canada, the current copyright act does not explicitly state if it is legal or not to do either of these. It is legal to make a backup of computer programs, and you are allowed to copy audio/video for personal use. In the current situation it seems quite legal to backup and defeat copy protection. I think this is great as I PURCHASED a product and would like to use it in the manner I see fit. Of course it is illegal for me to share the backup. &lt;br /&gt;
&lt;br /&gt;
From my understanding, in the United States, it is only partially legal to create a backup (yup partially legal). It seems that making a backup copy is totally fine but if you break copy protection it violates the Digital Millenium Copyright Act as it may be considered that you have circumvented copy protection on the DVD. Circumvention though could be in the eye of the beholder as computer software has to open the DVD and decrypt it for playback, capturing the legally decrypted data and placing it on your hard drive may be totally legal.&lt;br /&gt;
&lt;br /&gt;
Canada is working to reform its copyright act so there may be some big changes to modernize it. From reading over &lt;a href="javascript:void(0);/*1277851625502*/"&gt;Bill C-32&lt;/a&gt;, I see this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;29.22 (1) It is not an infringement of copyright for an individual to reproduce a work or other subject-matter or any substantial part of a work or other subject-matter if&lt;br /&gt;
(a) the copy of the work or other subject-matter from which the reproduction is made is not an infringing copy;&lt;br /&gt;
(b) the individual legally obtained the copy of the work or other subject-matter from which the reproduction is made, other than by borrowing it or renting it, and owns or is authorized to use the medium or device on which it is reproduced;&lt;br /&gt;
(c) the individual, in order to make the reproduction, did not circumvent, as defined in section 41, a technological protection measure, as defined in that section, or cause one to be circumvented;&lt;br /&gt;
(d) the individual does not give the reproduction away; and&lt;br /&gt;
(e) the reproduction is used only for private purposes.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
The issue here becomes circumventing technological protection measures. This is where I don't agree as I purchased it so why should I not be able to do what I want with it in my own home? Frankly, if I can't do what I want with content I buy then I will cease buying it. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;DOWNLOADING MEDIA&lt;/span&gt;&lt;br /&gt;
In Canada, this is technically legal as long as you don't distribute it or profit from it. After playing around with converting my own DVDs (that post is coming up), it may be easier to let someone else do the hard work of properly converting a movie and download it from them. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Modifying Your XBOX&lt;/span&gt;&lt;br /&gt;
I have an old xbox just collecting dust so I installed Xbox Media Center on it. This is not an MS product, it is a replacement OS created by the community (that is awesome) but does require a lot of work to get it installed (there are lots of tutorials out there on the internet about it though). Is it legal to modify your xbox? From what I see, yes. If you mod your xbox it voids your warranty and violates Microsoft's use policy so it will probably not work online. For me that is fine as I am just using it as a media center hooked up to my TV.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Streaming Media Over Wireless&lt;/span&gt;&lt;br /&gt;
An interesting potential gotcha is that streaming media over a wireless network may be considered broadcasting. Some media center devices will not stream some content for this very reason (buyer beware for sure). I really think this is a non-issue as most people secure their wireless networks and most neighbors don't have the technical expertise to watch what you are streaming but it could still be an issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://haveyougotwoods.com/aggbug/312.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/07/06/312.aspx</guid>
            <pubDate>Tue, 06 Jul 2010 17:51:45 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/312.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/07/06/312.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/312.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Going Digital At Home - Part 2 - Sharing</title>
            <category>General</category>
            <link>http://haveyougotwoods.com/archive/2010/06/25/311.aspx</link>
            <description>The next step in providing digital content is being able to share your existing media out to the home. There are several ways to do this.&lt;br /&gt;
&lt;br /&gt;
The first thing I want to talk about though is the codec issue. Video and audio can get quite large and there are many different ways to encode media to shrink its size down. In order to play a video you need the proper codec installed (a codec is a bit of code that properly decodes encoded video). The #1 issue with video playback has typically been that you don't have the right codec installed. Normally when you are missing a codec you go out and download the codec and install it on your computer. When you have a device connected to a T.V. though it may not be possible to add the codec you want (I ran into this with my XBOX 360 for instance).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Simple File Share&lt;/span&gt;&lt;br /&gt;
Most computers and devices can access file shares quite easily. On your media server just right click and goto sharing and then select the users. There are many tutorials out there on how to share a folder so I wont dig into the basics but there are a few key tricks to it. &lt;br /&gt;
&lt;br /&gt;
Most shares require the user to authenticate upon attempting to access a shared folder so that it can grant or deny access to that share. Now unless you have setup a domain controller for your house, it will not know who you are and want a username and password that has been setup on the computer sharing files. A neat trick is that if you have the same username/password setup on both the client and the server then you will automatically be authenticated. Otherwise it will prompt you for credentials. If you have children then it is adviseable to have a folder for family movies that allows the kids credentials and then a higher rated folder that requires an adults credentials.&lt;br /&gt;
&lt;br /&gt;
The other debate is what type of access the share should have. I typically have shared folders that are read only and one folder that allows write so that new content can be dropped in from any computer and then sorted into the proper readonly folder. &lt;br /&gt;
&lt;br /&gt;
The cons with this is that you need credentials, not all devices work over a file share, not all devices can play all types of media (due to the codec issue). For instance my xbox 360 does not access fileshares so this technique does not work)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Windows Media Sharing&lt;/span&gt;&lt;br /&gt;
I believe that starting with Windows Media Player 10 is an included service that allows you to share media out that is added to your Media Player library. I think that this solution works pretty good for the scenario where a user has one computer running a client operating system (i.e. XP/Vista/Windows 7) with their media and share it out. I have not tried it as I have a hatred for the bloatware that is Windows Media Player but it may just work for you. &lt;br /&gt;
&lt;br /&gt;
From my quick read it does appear to overcome the codec issue via transcoding. This means that the media player on your computer converts the video on the fly to a format the remote device knows how to play. Again I have not tried this but I leave it up to you to experiment.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Windows Media Center &amp;amp; Media Center Extenders&lt;/span&gt;&lt;br /&gt;
Media Center is a chunk of software that ships with some editions of Vista and Win7. It allows you to access all your media, photos, and more via a client. The XBOX 360 ships with just such a client so I tried it out. It was horrible. It could not play a lot of the videos I had (due to codec issues), it was slow to navigate, and I found the video was choppy a lot of the time. Granted, I tried this a few years ago and they have probably made improvements but I have moved on to other technologies. I also don't believe that you can have Media Center on a computer running a server OS (but again, I could be wrong)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Transcoding Server&lt;/span&gt;&lt;br /&gt;
I have found the best thing for me has been using a transcoding server called TVersity. The app converts video on the fly and streams it out to my devices just fine. The really nice feature is that you can also add internet feeds to the TVersity library. What this means is that I can take a show that published a feed and have my computer download that data, transcode it, and stream it to my xbox 360. I can now watch internet TV... on my TV! There is a lot of neat stuff you can do in this area.&lt;br /&gt;
&lt;br /&gt;
The biggest issue I have found with TVersity is that the service will not respond sometimes and requires me to restart the service. Friends of mine have had no problems but I have had the issue on two separate installs now. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Network Considerations&lt;/span&gt;&lt;br /&gt;
For all of these solutions you will need to have the appropriate exceptions in your firewall to allow the services that share media to be accessible. Bandwidth can also be an issue with wireless networks. I currently have my server connected  to the router via regular cat 5 cable but the devices I consume media on are wireless. This works fairly well but media sharing is a bandwidth intensive operation so the quality of wireless signal you get may have an effect on streaming. If you can use a hardwire connection then I would recommend it as it is much more reliable than wireless.&lt;img src="http://haveyougotwoods.com/aggbug/311.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/06/25/311.aspx</guid>
            <pubDate>Fri, 25 Jun 2010 15:49:33 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/311.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/06/25/311.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/311.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Prairie Dev Con Materials</title>
            <category>Speaking</category>
            <link>http://haveyougotwoods.com/archive/2010/06/06/310.aspx</link>
            <description>It was a blast presenting at the first Prarie Dev Con. It was great to have so many attendees with a willingness and want to learn new things. As promised, here are the session materials:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.haveyougotwoods.com/Images/haveyougotwoods_com/TDDDemo.zip"&gt;Hands On TDD&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.haveyougotwoods.com/Images/haveyougotwoods_com/Silverlight And WCF.zip"&gt;Silverlight &amp;amp; WCF In The Real World&lt;/a&gt;&lt;br /&gt;&lt;img src="http://haveyougotwoods.com/aggbug/310.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/06/06/310.aspx</guid>
            <pubDate>Sun, 06 Jun 2010 18:16:32 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/310.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/06/06/310.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/310.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Going Digital At Home - Part 1</title>
            <category>General</category>
            <link>http://haveyougotwoods.com/archive/2010/05/04/going-digital-at-home-part-1.aspx</link>
            <description>We have a lot of disparate sources of media around our home. DVDs, CDs, VHS, downloaded content, mp3s, etc. I find it to become more and more of a hastle running around finding the media I want, and then finding the device that can play that. Plus with 3 kids running around it is inevitable that their (and sometimes my) optical media gets scratched or damaged.&lt;br /&gt;
&lt;br /&gt;
To that end I have decided to try and go completely digital in our home and felt that documenting it may be of help to others.&lt;br /&gt;
&lt;br /&gt;
Infastructure:&lt;br /&gt;
Wireless network (802.11g)&lt;br /&gt;
3 televisions&lt;br /&gt;
2 original xboxes&lt;br /&gt;
1 xbox 360&lt;br /&gt;
1 server (more on this later)&lt;br /&gt;
multiple client laptops&lt;br /&gt;
&lt;br /&gt;
Goal:&lt;br /&gt;
-Have all media centralized&lt;br /&gt;
-Have a backup of all media (if I had to do this all over again I would cry)&lt;br /&gt;
-Have different media available from different terminals (kids television should not be able to watch adult shows)&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
The first step here was to get a central computer that will store all the media. This computer should have the following:&lt;br /&gt;
-Lots of storage&lt;br /&gt;
-A DVD and or Blue Ray player&lt;br /&gt;
-Have some sort of hard drive redundancy&lt;br /&gt;
-Enough CPU power to convert videos on the fly (A Pentium III 700Mhz is the bare minimum you would want)&lt;br /&gt;
-Enough techincal knowhow to install an operating system, install software, and install hardware into a computer.&lt;br /&gt;
&lt;br /&gt;
To do this I took an old server I had (but a desktop would work just fine) and installed two 2TB drives into it (at the time of writing they cost only $150 each). I also installed Windows Server 2008 R2 onto it but any OS of choice should do. &lt;br /&gt;
&lt;br /&gt;
The biggest difference between my setup and the average user is that my media server has a builtin SATA raid card which I configured to mirror the drives (so I only have 2GB of storage but when (not if, when) one fails I can plunk in another and be on my way). If you don't have hardware RAID and don't want to purchase it you can actually setup a raid in software. Setting up a software raid can be a bit tricky but I found a &lt;a href="javascript:void(0);/*1272983930330*/"&gt;great article&lt;/a&gt; about it. The only thing I would change is to give more than 10GB to windows / programs (at least 40GB nowdways I would think). Trust me in that running out of room on a partition is one of the most annoying things to happen to a person.&lt;br /&gt;
&lt;br /&gt;
Once you have the system setup and running I like to make sure that the drives are actually redundant. I have never ever found that a mirror is not actually working after I set it up but I just like to make sure. To do this I take each hard drive out and slave it into another computer and ensure that they both have the same data on it (just a quick check to make sure that the folder structures are copied to each). Once that is done I put them both back in and ensure the mirror is functioning (sometimes it may detect they are out of sync and need to resync the array). The other way to do this is to remove one drive from the server, turn it on, make sure it works, then repeat with the other drive. This process will require a resync of the array which is time consuming. It took at least 15 hours to resync my 2TB array.&lt;br /&gt;
&lt;br /&gt;
That is about it for now. In the future we will talk about software on the server, ripping DVDs and CDs, and how to watch/listen to this stuff on you TVs and computers effectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://haveyougotwoods.com/aggbug/309.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/05/04/going-digital-at-home-part-1.aspx</guid>
            <pubDate>Tue, 04 May 2010 15:48:31 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/309.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/05/04/going-digital-at-home-part-1.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/309.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Passing Parameters to a target in MSBuild</title>
            <category>General</category>
            <link>http://haveyougotwoods.com/archive/2010/04/29/passing-parameters-to-a-target-in-msbuild.aspx</link>
            <description>&lt;p&gt;On our current project we are using MSBuild to build our application. This is my first time using MSBuild other than just tinkering and I have found it.... challenging to say the least. A lot of my challenges are lack of knowledge but the other half is the language itself. &lt;/p&gt;
&lt;p&gt;The most recent challenge I wanted to write about was calling a target multiple times. Our scenario is this: We have to generate a batch file for each environment we are going to install in with environment specific settings. The issue I had was that for each environment we had that we were copying and pasting the steps and changing values for each environments. While this worked, as the number of environments grew the size of the build task grew and got harder to modify as requirements changed.&lt;/p&gt;
&lt;p&gt;Ideally what we would have is a task that would generate a batch file based on a set of parameters that we could just call out to so I built this:&lt;/p&gt;
&lt;p align="left"&gt; &lt;font face=""&gt;  &amp;lt;Target Name="BuildBatchFile "&amp;gt;&lt;br /&gt;
    &amp;lt;Copy SourceFiles="install.bat" &lt;br /&gt;
                 DestinationFiles="MyApp.Setup\Release\install.$(BATCHENV).bat" &lt;br /&gt;
                 &lt;/font&gt;&lt;font face=""&gt;ContinueOnError="false"  &lt;br /&gt;
                 SkipUnchangedFiles="false" /&amp;gt;&lt;br /&gt;
    &amp;lt;FileUpdate Files="MyApp.Setup\Release\install.$(BATCHENV).bat" &lt;br /&gt;
                           Regex="{ENV}" &lt;br /&gt;
                           ReplacementText="$(ENV)" /&amp;gt;&lt;br /&gt;
    &amp;lt;FileUpdate Files="MyApp.Setup\Release\install.$(BATCHENV).bat" &lt;br /&gt;
                           Regex="{VDIR}" &lt;br /&gt;
                           ReplacementText="$(VDIR)" /&amp;gt;&lt;br /&gt;
    &amp;lt;FileUpdate Files="MyApp.Setup\Release\install.$(BATCHENV).bat" &lt;br /&gt;
                           Regex="{INSTALLDIR}" &lt;br /&gt;
                           ReplacementText="$(INSTALLDIR)" /&amp;gt;&lt;br /&gt;
  &amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So this copies my template install.bat to install.[ENVIRONMENT[.bat and then does all the string replacements on it.&lt;/p&gt;
&lt;p&gt;The issue is how to invoke this task with different sets of data. My first thought was this:&lt;/p&gt;
&lt;p align="left"&gt;&amp;lt;CallTarget Targets="BuildConfigFile" /&amp;gt; &lt;/p&gt;
&lt;p&gt;Unfortunately, there is no way to pass parameters to a target. The only way to do that is to call MSBuild and set the parameters passed to MSBuild (this does feel wrong but I am not sure of a better way to do it so far)&lt;/p&gt;
&lt;p align="left"&gt;&lt;font face=""&gt;&amp;lt;Target Name="BuildDeploymentPackage"&amp;gt;&lt;br /&gt;
    &amp;lt;MSBuild Projects="$(MSBuildProjectFile)" &lt;br /&gt;
                      Targets="BuildBatchFile "   &lt;br /&gt;
                      Properties="BATCHENV=ALPHA;ENV=ALPHA;VDIR=PASIPrep;INSTALLDIR=C:\inetpub\wwwroot\MyApp;" /&amp;gt;&lt;br /&gt;
    &amp;lt;MSBuild Projects="$(MSBuildProjectFile)" &lt;br /&gt;
                       Targets="BuildBatchFile " &lt;br /&gt;
                        Properties="BATCHENV=SYST;ENV=SYST;VDIR=MyApp;INSTALLDIR=C:\inetpub\wwwroot\MyApp;" /&amp;gt;&lt;br /&gt;
    &amp;lt;MSBuild Projects="$(MSBuildProjectFile)" &lt;br /&gt;
                       Targets="BuildBatchFile " &lt;br /&gt;
                       Properties="BATCHENV=TRAINING;ENV=TEST;VDIR=MyApp;INSTALLDIR=C:\inetpub\wwwroot\MyApp.TEST;" /&amp;gt;&lt;br /&gt;
  &amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The above target calls MSBuild to call its own build file and run the BuildBatchFile target with a set of parameters. &lt;/p&gt;
&lt;p&gt;Hope this helps (or someone shows me a better way to do it)!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://haveyougotwoods.com/aggbug/308.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/04/29/passing-parameters-to-a-target-in-msbuild.aspx</guid>
            <pubDate>Thu, 29 Apr 2010 20:28:51 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/308.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/04/29/passing-parameters-to-a-target-in-msbuild.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/308.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Testing Your Configuration</title>
            <category>General</category>
            <link>http://haveyougotwoods.com/archive/2010/04/16/testing-your-configuration.aspx</link>
            <description>One common issue of team development is sharing configuration files. If a developer is testing something out and changes a value and then accidentally checks that file in it affects all developers.&lt;br /&gt;
&lt;br /&gt;
There are a few approaches to solving this issue:&lt;br /&gt;
1) Be very careful and disciplined. &lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;+Simple&lt;br /&gt;
-SImple to forget&lt;/div&gt;
2) Have a web.config.template under source control that developers copy to web.config and not include in source control. &lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;+Prevents checkins of web.config files that affect other people&lt;br /&gt;
-Developers need to manually update their config files if a new value is added/removed/or the default updated&lt;br /&gt;
&lt;/div&gt;
3) Have a build script task to generate a config file on demand.&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;+Changes are easily propagated through the script&lt;br /&gt;
-If a developer mucks with the build script and checks it in then we have the same problem (but less likely to happen)&lt;br /&gt;
&lt;/div&gt;
4) What we are trying. Unit test the configuration to make sure it is correct.&lt;br /&gt;
+web.config is under source control&lt;br /&gt;
+changes are caught by a test. If it is meant to be distributed to all developers then the test should be updated as well&lt;br /&gt;
-have to write a test for the configuration (not a big minus in my opinion)&lt;br /&gt;
-If you have different config settings for the test project than the actual project then this will not work&lt;br /&gt;
&lt;br /&gt;
In order to test a config file though we need to be able to load that config file! In our case we are testing a web.config and nunit is expecting a app.test.dll.config file. The easy way around this was to copy the web.config from our application to the proper folder and name with a pre-build event:&lt;br /&gt;
&lt;br /&gt;
copy $(SolutionDir)\App.Service\web.config $(ProjectDir)\bin\App.Test.dll.config /y&lt;br /&gt;
&lt;br /&gt;
Now my tests use that config file to assert that the settings are proper. The big downside to this approach is that it will overwrite the app.config file that you may already have for your test which may not be desirable.&lt;br /&gt;
&lt;br /&gt;
Alternatives:&lt;br /&gt;
1) Parse the XML of the config file you want to test and verify&lt;br /&gt;
2) Load and unload and external config file in a test (I started with this and could not get it to work)&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://haveyougotwoods.com/aggbug/307.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/04/16/testing-your-configuration.aspx</guid>
            <pubDate>Fri, 16 Apr 2010 18:38:37 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/307.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/04/16/testing-your-configuration.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/307.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Staying Secure</title>
            <category>Security</category>
            <link>http://haveyougotwoods.com/archive/2010/03/24/staying-secure.aspx</link>
            <description>I have started to realize that there are a few things I do that most average users do not to stay secure.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
    &lt;li&gt;I use a password manager (Roboform) that integrates with my browser. This tool makes me remember one master password and then allows me to fill in login forms on websites with only needing to know one master password. This has let me use unique passwords on all the sites I login to. I see looking through my list of sites that I have 45 accounts on various sites and there is no way that I could remember 45 unique passwords.&lt;/li&gt;
    &lt;li&gt;I use encrypted pop/smtp/imap so as not to divulge my password. Most of the world still seems to use unauthenticated POP3 for some reason&lt;/li&gt;
    &lt;li&gt;I use the NoScript add on for Firefox that allows me to control if scripts run on a page or not&lt;/li&gt;
    &lt;li&gt;I use the ForceTLS add on for Firefox so that if I visit a http site that it will redirect me to an https site (unfortunately you have to setup this list on your own)&lt;/li&gt;
    &lt;li&gt;I never upgrade an OS. I always reinstall. Call me paranoid but it is hard for anything bad to survive a wipe and reinstall&lt;/li&gt;
    &lt;li&gt;I run the Secunia Personal Software Inspector that checks for security issues in third party apps and allows me to easily download updates&lt;/li&gt;
    &lt;li&gt; I run Microsoft Security Essentials. A free, lightweight, and (from what I have read) accurate virus scanner. It reminds me of how all antivirus software starts out so lets hope MS does not bloat it up.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://haveyougotwoods.com/aggbug/306.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/03/24/staying-secure.aspx</guid>
            <pubDate>Thu, 25 Mar 2010 03:29:25 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/306.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/03/24/staying-secure.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/306.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Trust. It is a Two Way Street</title>
            <category>Security</category>
            <link>http://haveyougotwoods.com/archive/2010/01/20/trust.-it-is-a-two-way-street.aspx</link>
            <description>One of the most common flaws I am seeing in applications is the lack of mutual authentication. Most systems authenticate that the user connecting to their system is a valid user. What is lacking is that the client verifies that it is connecting to who it thinks it is connecting to. &lt;br /&gt;
&lt;br /&gt;
One of the big examples of this is WiFi. If I have a wireless router named "myrouter" and set my laptop to use that router things work great. If I go down the street and someone else has a router named "myrouter", my laptop automatically tries to connect to it. This is because the WiFi implementation does not verify that I am connecting to who I think I am connecting to. &lt;br /&gt;
&lt;br /&gt;
This happens a lot on the service level of applications. The client app resolves a DNS name like www.myservice.com to it's IP address and then sends over some form of authentication. Now what happens if I somehow manage to change the DNS record for www.myservice.com to point to my IP address which contains a service with the same name and same methods exposed to it? The client will connect and divulge its authentication data to this fake service. I can now use the authentication data that you gave me authenticate against the real system and do whatever nefarious things I desire. &lt;br /&gt;
&lt;br /&gt;
The solution for this is for clients to verify that the service it is talking to is actually the service you want to be talking to. This is best accomplished by using some form of shared secret. This takes on many forms but a few methods:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
    &lt;li&gt;Ask the server to answer a shifting question. i.e. ask the server to hash a certain string. If the hash the server returns matches what you expect then the server might be the one you want (or an attacker managed to replicate the algorithm)&lt;/li&gt;
    &lt;li&gt;Use windows authentication. For WCF the mutual authentication is implied in this case.&lt;/li&gt;
    &lt;li&gt;Use certificate authentication. This is the best way to do this task but can be a pain to implement.&lt;br /&gt;
    &lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://haveyougotwoods.com/aggbug/304.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/01/20/trust.-it-is-a-two-way-street.aspx</guid>
            <pubDate>Wed, 20 Jan 2010 19:16:41 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/304.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/01/20/trust.-it-is-a-two-way-street.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/304.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Team City Build Versioning</title>
            <category>General</category>
            <link>http://haveyougotwoods.com/archive/2010/01/19/team-city-build-versioning.aspx</link>
            <description>One of the great things about continuous integration is that we can increment our assemblies version number with each build. For our project we also apply a label to our source code repository every time we build a deployment package. This allows us to get the version of source code from the exact point in time that the msi was built.&lt;br /&gt;
&lt;br /&gt;
One of the issues we ran into was that we have three build configurations:&lt;br /&gt;
1. "CI" This gets run on every checkin of code&lt;br /&gt;
2. "Deploy - ALPHA" This is run manually to deploy to our alpha test environment&lt;br /&gt;
3. "Deploy - ALPHA &amp;amp; BETA" This is also run manually and this deploys the same version to both the alpha and beta test environments&lt;br /&gt;
&lt;br /&gt;
The issue we ran into is that each configuration has its own build number that is incrementing so if we ran "Deploy - ALPHA" 10 times we would have v 1.10.0.0 in ALPHA. If we then ran "Deploy - ALPHA &amp;amp; BETA" for the first time suddenly ALPHA now has v1.1.0.0! Obviously this is not very intuitive. In the end we added in the version number from our source code repository into our build numbers for both deploy configurations. Now we get build numbers like this: 1.46347373.0.0 &lt;br /&gt;
&lt;br /&gt;
The way we did this was by using the vcs variable in team city: 1.{build.vcs.number.TheNameOfVCSRoot}.0.{0}. The last digit is still an incrementing counter in case you re-run the build that something still increments even though the version in source control has not changed.&lt;br /&gt;&lt;img src="http://haveyougotwoods.com/aggbug/303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/01/19/team-city-build-versioning.aspx</guid>
            <pubDate>Tue, 19 Jan 2010 18:57:36 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/303.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/01/19/team-city-build-versioning.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/303.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Remote MSI Execution</title>
            <category>General</category>
            <category>Agile</category>
            <link>http://haveyougotwoods.com/archive/2010/01/18/remote-msi-execution.aspx</link>
            <description>One of the things we have started doing as part of our process is having a build script that creates our deployment package in an automated fashion. We then tied that into our build server so that from one click anyone could create the package. The issue is that we have several test environments and copying the setup.msi file to multiple servers and installing it is a time consuming pain. To streamline our deployment we created a vbscript (yes, it was painful) to remotely uninstall previous versions and then install the new version of the msi. Here is the script currently:&lt;br /&gt;
&lt;br /&gt;
strComputer = "mytestserver"&lt;br /&gt;
&lt;br /&gt;
Wscript.Echo "Getting WMI Object"&lt;br /&gt;
Set objWMIService = GetObject("winmgmts:" &amp;amp; "{impersonationLevel=impersonate}!\\" &amp;amp; strComputer &amp;amp; "\root\cimv2")&lt;br /&gt;
&lt;br /&gt;
Wscript.Echo "Finding Previous versions"&lt;br /&gt;
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = 'My First Setup Project'")&lt;br /&gt;
For Each objSoftware in colSoftware&lt;br /&gt;
    Wscript.Echo "Uninstalling a previous version"&lt;br /&gt;
    objSoftware.Uninstall()&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
Wscript.Echo "Getting Software Object"&lt;br /&gt;
Set objSoftware = objWMIService.Get("Win32_Product")&lt;br /&gt;
&lt;br /&gt;
Wscript.Echo "Installing"&lt;br /&gt;
errReturn = objSoftware.Install("c:\builds\MyFirstSetupProject.msi", "TARGETENV=DEVL",True)&lt;br /&gt;
&lt;br /&gt;
Wscript.Echo "Install status: " &amp;amp; errReturn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order for this to work the msi must be copied to the remote machine to work. I tried connecting to a central network share but it did not seem to work for me. The script needs a bit of work but now we can deploy to the environments we want updated in a couple of minutes instead of the 15-20 minutes it took us before.&lt;img src="http://haveyougotwoods.com/aggbug/302.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Woods</dc:creator>
            <guid>http://haveyougotwoods.com/archive/2010/01/18/remote-msi-execution.aspx</guid>
            <pubDate>Mon, 18 Jan 2010 23:41:27 GMT</pubDate>
            <wfw:comment>http://haveyougotwoods.com/comments/302.aspx</wfw:comment>
            <comments>http://haveyougotwoods.com/archive/2010/01/18/remote-msi-execution.aspx#feedback</comments>
            <wfw:commentRss>http://haveyougotwoods.com/comments/commentRss/302.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>