Custom component seems to un-register itself?

I've run into this a second time now. I'm hoping for some resolution AND guidance for proper build, save, etc. protocols in BIDS.

I've coded a custom component, included post-build procedures to add it to the GAC, selected it from the "Choose Items..." menu, and successfully added to a data flow. I've then been able to succesfully debug it.

This was all Friday afternoon. I shut down my BIDS session(s) and called it a week. This morning when I open BIDS, I get the following error when I attempt to add it to a data flow task:

TITLE: Microsoft Visual Studio
------------------------------
The component could not be added to the Data Flow task.
Could not initialize the component. There is a potential problem in the ProvideComponentProperties method.
------------------------------
ADDITIONAL INFORMATION:
Error at Data Flow Task [DTS.Pipeline]: Component "component "" (16)" could not be created and returned error code 0x80131600. Make sure that the component is registered correctly.
------------------------------
Exception from HRESULT: 0xC0048021 (Microsoft.SqlServer.DTSPipelineWrap)
------------------------------
BUTTONS:
OK
------------------------------

What would explain this I'm new to VS/BIDS. Am I improperly shutting down my BIDS sessions Is a save required for my code Does "Build <component>" not automatically save

Also, when I re-build a component after making a change to it, what do I need to do in my package's Data Flow task Delete the current component, re-add it, and configure it again I'm sure there are certain things that require one type of re-initialization vs. others (i.e., making a change to the Design Time code vs. making a change to code within the ProcessInput method.)

What can I do to properly register this now I'm dead in the water and have no idea what to do. Any help's appreciated.





Answer this question

Custom component seems to un-register itself?

  • EddieMu

    Thanks, Jaime and Darren for the best practices.

    Still receiving the same error message. I've checked C:\WINDOWS\assembly and %PROGRAMFILES%\Microsoft SQL Server\90\DTS\PipelineComponents and verified that both have what's needed in each. The dll timestamp in the PipelineComponents updates each time I build the component as well.

    Any ideas where else I could look Or what other information would be useful

    Here's the output of my build:

    ------ Build started: Project: NameCleanse, Configuration: Debug Any CPU ------
    NameCleanse -> C:\Program Files\Microsoft SQL Server\90\DTS\PipelineComponents\IE.Dts.Pipeline.NameCleanse.dll
    "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\\..\..\SDK\v2.0\Bin\gacutil" /if "C:\Program Files\Microsoft SQL Server\90\DTS\PipelineComponents\IE.Dts.Pipeline.NameCleanse.dll"
    Microsoft (R) .NET Global Assembly Cache Utility. Version 2.0.50727.42
    Copyright (c) Microsoft Corporation. All rights reserved.

    Assembly successfully added to the cache
    ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========



  • Selva

    I don't. It's set to 1.0.0.0.

    In the original post, I stated that this is the second time this has happened. The first instance this occurred I assumed I'd mucked around with the versioning and got myself in a bind. So basically, I created a new project and followed the Wrox Press book step-for-step through assembly signing and then I copied the code from the first attempt into the second and built the new component.

    All was well until I left for the weekend and came back. I had run the component multiple times, debugged it, etc. That was more or less what happened the first time.

    In this component, I'm referencing a 3rd party COM object, passing data to it, and setting buffer columns to the results returned (again, just giving any information...)

    Oh, also, I'm doing this in VB rather than C#.

  • Steve Lacey

    Just providing some more information as I come upon it. I captured the debug output when I tried to add the component to the data flow task:

    First-chance exception at 0x77e55dea in devenv.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
    First-chance exception at 0x78144d3a (msvcr80.dll) in devenv.exe: 0xC0000005: Access violation reading location 0x0b437000.

  • Mauro Mazzieri

    No, that last one isn't any help.To me anyway :)

    You haven't got your assembly version number set to auto-increment in AssemblyInfo.cs have you

    -Jamie



  • Sankar N

    That seems strange. Check to see whether the DLL is still GACd' and make sure that its in %PROGRAMFILES%\Microsoft SQl Server\90\DTS\PipelineComponents

    The answer to what you need to do when you rebuild a component is "it depends". I generally find that if the component metadata (i.e. inputs, outputs custom properties) hasn't changed then you don't need to go through the rigmarole of adding it to the data-flow again. I can't come up with an exact scenario where you need to do it - its a bit of an inexact science.

    What is true is that you don't always need to re-add it into the toolbox and the data-flow as long as the assembly version number does not change. And that is good news.

    -Jamie



  • Edgar Zapata

    I believe I've discovered what the reason for this is error is and it does relate to tips Jaime and Darren mentioned.

    In one BIDS session I had my package containing the custom component. In the other, I had my VB code, which I was making changes to after debugging. Because I wasn't making change to anything other than the PreExecute and ProvideComponents methods (or so I thought), I was simply re-executing the the package without closing out my package session. In one "fix" I had actually moved the declaration of the COM object I mentioned to general declarations, which broke the component. But, because I was not reloading it, the component and package continued to work. Only after I reloaded it following the weekend did that first error get thrown.

    I've found that if I right click on my package in Solution Explorer and choose "Reload with Upgrade" it'll reload the package without requiring me to shut down BIDS (which is a hassle.) Then I'll know right away if the last change broke it.

  • DmitryMS

    You will only need to delete the existing component if you have changed methods which need to be re-run from the start, or you change the external "view" of the component such as the strong name or change properties.

    If you change design-time methods and want to test them in BIDS then you will need to restart BIDS after each compilation, "Build XXX"

    If you change run-time then you can just re-exceute the package as execution process is a separate process from BIDS. In fact for testing run-time issues, set your project debug option to be DTEXE and add command line parameters to load a sample package in which you use your component. This is great for testing changes in ProcessInput for example.



  • Custom component seems to un-register itself?