TFS / TSWA Custom Controls - "Unable to create workitem control 'ControlName'." - Part 2

As it turns out, I had missed one of the required interfaces. When creating the web control, it requires that it inherits from WebControl and implements IWorkItemControl & IWorkItemWebControl. My initial attempts were missing the IWorkItemWebControl implementation. Once I had that resolved, my control began rendering. Still have some bugs to work out but those should be relatively easy. Once I have the control complete, I will post it with a link to the actual silverlight control I am hosting!

TFS / TSWA Custom Controls - "Unable to create workitem control 'ControlName'."

I have been trying to create a fairly simple custom control to be used by the TFS Web Access application. At my day job, we use TFS extensively and are working towards a solution that allows us to use it exclusively too. One of the major drawbacks we are currently facing is the lack of a built in time entry control. Another colleague of mine has created a time entry control in Silverlight to facilitate use in the two environments. In Team Explorer, a simple browser control was added to a tab to house the Time Entry component. It works well though it still has some minor quirks. I have been assigned to port the same concept (preferably to use the same Silverlight control) to the web side.

The issue I have run into is that the Work Item Template does not have any controls to support Silverlight or any other web site redirection. My thought was to use an IFrame to embed the Silverlight right in but I am not aware of any way to use the existing controls to support it. My next thought was to create a very simple server side control that will just render an IFrame directed to the appropriate URL. The new control is working in test environments (dummy pages), however, when I try to integrate it into the Work Item Template, it fails every time.

I have received numerous errors simply indicating that the control can not be created. Using FUSLOGVW.exe, I began to dig into the issue. I've verified in some cases that the library, dependencies, and the .wicc file are all properly located and found. Still, the control can't be created. I've tried modifiying the wicc file, changing namespaces, and updating the web.config (restarting IIS after every change). Every attempt still fails but now I'm getting different errors.

In the wicc file for the assembly name, if I include the ".dll" at the end of the assembly name, it searches for "assembly.dll.dll" and/or "assembly.dll.exe". Obviously it will not find a file by either of those names. If I remove the ".dll" at the end of the assembly name, it searches for just the assembly name with no extension at all....which again, it will never find.

So the million dollar question is what is going on here? I'm sure it is something stupid that I am overlooking. These things usually turn out that way which only raises the frustrations, but I will figure it out and post my resolution when I do.

The Worst Job I've Had...

...was likely the best thing possible for my professional career. Though this may seem strange, let me explain the reasoning. I am currently one of the Senior Web Developers within my organization. This is a far cry from the Bachelors Degree in Management I originally graduated with.

I started as a self-taught programmer with my first job out of college. I began my career with a small medical software company (2 developers, < 10 employees total) writing low-level communication drivers and APIs (using Delphi, C, & SQL). Being such a small company, alot was demanded from me. I had to design, code, test (with some help), and deploy all of the code I wrote myself to the external customers whom I worked with daily. After 3 years and a greatly expanded set of responsibilities, I was feeling confident. I felt that I knew what I needed to make the next step in my career. With confidence brewing, I moved on to a much larger corporation in the middle of trying to attain Sarbanes-Oxley (SOX) compliance.

Needless to say, it was a drastic environmental change for me. I needed to learn to work more as a member of a team rather than being the whole team. I needed to learn new processes and how to formally document my analysis, development plans, and testing plans. The code base was over 100x bigger than anything I had ever worked with deep object inheritance (most of my prior experience had more of a functional form). My manager was new at the role and lacked the experience to recognize how much I struggled...or just didn't have the know how to help me adapt. I worked through it for one year before I moved on again.

In preparation for moving on, I recognized that Delphi was a dying language. I wanted to enter the .NET realm and pursue a Masters Degree in Software Engineering. Luck was in my favor and I actually went back to my former employer to work on a new project in .NET with the opportunity to work from home. I found the lackadaisical environment to be comforting having just left a place with significant turbulence. Not to mention, working from home was a great experience and it provided the flexibility I need to attend grad school.

Over the next 3 years, I worked towards a Masters in Software Engineering and always found myself reading technical books outside of the classroom. I have taken on the challenge of trying to learn best practices and keep up with new technologies while gaining deeper understanding of existing technologies. I had also discovered how informative podcasts can be (.NET Rocks, Hanselminutes, & ALT.NET to name a few). I recognized that reading the blogs of the industry gurus and my peers provided priceless information, examples, and viewpoints. I've become more of a proponent for open-source and have spent significant time looking at open-source code.

Since finishing my Masters, I have moved on to my current employer (which is again a large, highly structured organization). Our development team consists of about 50 employees and contractors. Here I have taken a strong interest in continuous integration, automated builds, and utilizing aspects of agile methodologies in my daily development practices. I am still always reading at least one technical book at a time (often 2 - 3) and follow numerous blogs on a daily basis. I try to be more aware of the things I do not know. I've come to believe that relentless education is the only way to be successful in the software development industry because of it's accellerated rate of growth. For anybody that thinks they know enough to carry them through to retirement, they better plan on retiring soon! Technology is simply changing too fast. If we don't pursue it, we will just be left behind with future prospects fading quickly.

So, back to the original statement. The worst job I've had was likely the best thing possible for my professional career. It was quite the humbling experience. I try to remain humble and am always eager to learn something new. I suggest that, you too, implement a relentless pursuit for continued education in the areas you find most interesting. Never consider yourself to THE expert. Be humble, yet confident. There is always something left to be learned no matter how good everything seems.