Geeks With Blogs

News This is the *old* blog. The new one is at blog.sixeyed.com
Elton Stoneman
This is the *old* blog. The new one is at blog.sixeyed.com

[Source: http://geekswithblogs.net/EltonStoneman]

Most of the interfaces you implement for a pipeline component are boilerplate code, so I tend to put them in a base class and just override what's needed. If the base class is in a separate assembly from other pipeline components, and you're using a CI build process to build them all, you may have an issue getting your subsequent pipeline projects to build.

In a typical MSBuild script, I'll get the projects from the solution file(s), and then:

  • build the C# projects with MSBuild
  • copy any pipeline component assemblies to Program Files\Microsoft BizTalk Server 2006\Pipeline Components
  • shell out to devenv for the BizTalk projects
  • GAC all the C# and BTS assemblies

When the application is packaged up, all the assemblies will go in the GAC but on the build server, I was getting failures building the pipeline projects, with: error BTP0004: Component 'x.y.z.Decoder' could not be initialized. Pipeline component 'x.y.z' could not be resolved (is an assembly reference missing?).

It turns out the library with the pipeline component base class wasn't being found. Using fuslogvw it seems when devenv builds the pipeline project, it looks in the Pipeline Components folder and finds the component, but when it looks for the base class library, it looks in two other places:

  • Program Files\Microsoft BizTalk Server 2006\Developer Tools
  • Program Files\Microsoft Visual Studio 8\Common7\IDE

If you don't want to put your pipeline component assembly and its dependencies in the GAC before building the BizTalk projects, this MSBuild snippet copies them to the relevant places:

<ItemGroup>

<PipelineComponents Include="$(BuildOutputDir)\**\x.y.*.PipelineComponents.dll"

Exclude="$(BuildOutputDir)\**\x.y.*.Test.dll"/>

</ItemGroup>

 

<ItemGroup>

<PipelineComponentsDir Include="C:\Program Files\Microsoft BizTalk Server 2006\Pipeline Components"/>

<PipelineComponentsDir Include="C:\Program Files\Microsoft BizTalk Server 2006\Developer Tools"/>

<PipelineComponentsDir Include="C:\Program Files\Microsoft Visual Studio 8\Common7\IDE"/>

</ItemGroup>

 

<Target Name ="DeployPipelineComponents">

<Copy SourceFiles="@(PipelineComponents)" DestinationFolder="%(PipelineComponentsDir.Identity)" SkipUnchangedFiles="true"/>

</Target>

Posted on Friday, July 25, 2008 9:52 AM BizTalk 2006 R2 , Code Snippet , MSBuild | Back to top


Comments on this post: Deploying Pipeline Components in a CI Build

# re: Deploying Pipeline Components in a CI Build
Requesting Gravatar...
XML really drives me up the wall some times. Thanks for these tips though Stoneman!
Left by Staff Handbook on Apr 30, 2010 2:28 PM

# re: Deploying Pipeline Components in a CI Build
Requesting Gravatar...
Thanks for the tips.

Another reason for this issue is the referenced assembly is not signed or is delayed signed. My pipleline component referenced a project where the core components were defined/implemented. The assembly was delayed signed because of which i was getting this error. Making it strong named assembly resolved this issue.
Left by Rupreet on Jul 06, 2010 10:44 AM

# re: Deploying Pipeline Components in a CI Build
Requesting Gravatar...
Very good tips...It's provided a couple but it would be nice if you went into a little more detail about it..
Left by London escorts on Apr 23, 2011 11:13 AM

# re: Deploying Pipeline Components in a CI Build
Requesting Gravatar...
Standar and traditional script give more assurance for me as its support can help me when I found difficulties.
Left by accredited high school diploma on May 13, 2011 5:36 AM

# re: Deploying Pipeline Components in a CI Build
Requesting Gravatar...
Thank you for this article, it's very helpful
Left by Gartengeräte im Test on Dec 09, 2012 5:03 PM

Your comment:
 (will show your gravatar)


Copyright © Elton Stoneman | Powered by: GeeksWithBlogs.net