Solved

Developing a strong named library in C# that meets ComVisibility requirements

Posted on 2008-10-03
2
1,039 Views
Last Modified: 2013-12-17
I have been trying to develop a library (DLL) in Visual Studio 2008 and C# that could be used by a PowerBuilder application that we have in-house at our organization. I've developed a simple library just to test the concept. I've successfully compiled the library, including checking "Sign the Assembly" with a strong name key file in the project properties. I then registered the assembly with the GAC utility (gacutil), and that was successful, too.

Now, when I attempt to use the assembly in a test app (also .NET), I get the following error:

"Invalid ServicedComponent-derived classes were found in the assembly.
(Classes must be public, concrete, have a public default constructor, and meet all other ComVisibility requirements)"

I've attached the entire code for the class library, but I can't figure out what about it doesn't meet ComVisibility requirements. It has a default constructor, it all the required methods and properties are public. What's missing?
using System;
using System.Collections.Generic;
using System.EnterpriseServices;
using System.Linq;
using System.Text;
[assembly: Description("Sample DLL application to test the viability of using a DLL CrewManager Interface")]
 
namespace NIIPCrewManager
{
    [Transaction(TransactionOption.RequiresNew)]
    public class CMJob : ServicedComponent
    {
        private string m_WorkRequestNumber = string.Empty;
        private string m_CrewManagerNumber = string.Empty;
 
        #region Constructors
        /// <summary>
        /// Constructor of this class without arguments.
        /// </summary>
        public CMJob()
        {
        }
 
        /// <summary>
        /// Constructor of this class with arguments.
        /// </summary>
        public CMJob(string p_WorkRequestNumber)
        {
            m_WorkRequestNumber = p_WorkRequestNumber;
        }
        #endregion
 
        #region PUBLIC PROPERTIES
 
        /// <summary>
        /// Gets / Sets the NIIP Work Request for the job.
        /// </summary>
        public string WorkRequestNumber
        {
            get { return m_WorkRequestNumber; }
            set { m_WorkRequestNumber = value; }
        }
 
        /// <summary>
        /// Gets / Sets the CrewManager Job Number for the job.
        /// </summary>
        public string CrewManagerNumber
        {
            get { return m_CrewManagerNumber; }
            set { m_CrewManagerNumber = value; }
        }
 
        #endregion
 
        #region PUBLIC METHODS
 
        /// <summary>
        /// Creates the CrewManager Job and returns the CrewManager Job Number.
        /// </summary>
        public string CreateCrewManagerJob()
        {
            CrewManagerNumber = "TST1234";
 
            return CrewManagerNumber;
        }
 
        /// <summary>
        /// Creates the CrewManager Job and returns the CrewManager Job Number.
        /// </summary>
        public string CreateCrewManagerJob(string p_WorkRequestNumber)
        {
            WorkRequestNumber = p_WorkRequestNumber;
            CrewManagerNumber = "TST1234";
 
            return CrewManagerNumber;
        }
 
        #endregion
 
    }
}

Open in new window

0
Comment
Question by:DanielBorson
2 Comments
 
LVL 19

Accepted Solution

by:
elimesika earned 250 total points
ID: 22642308
HI

Do the following

1) remove the class constructor that has a parameter (it should have just the default empty constructor)

2) Compile your project

3) in your test application , create the object , use the object property to set the value of WorkRequestNumber

You are not being able to call a constructor that has your parameters, but it's the price you pay to implement the ServicedComponent model.
0
 

Author Comment

by:DanielBorson
ID: 22764540
Thanks. We ended up re-doing this as a web service, but your answer makes perfect sense.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question