Solved

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

Posted on 2008-10-03
2
1,037 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

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

911 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

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now