RegAsm dll n'types enregistré

Je suis tenter d'inscrire un .dll à l'aide de RegAsm. C'est un .NET 2.0 dll. Toutes les classes sont ouvertes au public et ComVisible est vrai. Je suis encore en train de la RA0000 : Pas de types ont été enregistrés à l'erreur. Ci-dessous le code et assemblyinfo. Toute aide serait super, merci!

STARTelnet.cs

/**
*Steven T. Norris     Created: 3/27/2012
*Last Updated By: Steven T. Norris     Last Updated On: 3/27/2012
*
*/
using System;
using MinimalisticTelnet;
using System.Net.Sockets;
/**
* @brief Used to connect to, read, and respond to a STAR terminal session.
* 
* Steven T. Norris     Created: 3/27/2012
*/
namespace STARTelnet
{
/**
* Class used to connect to, read, and respond to a STAR terminal session. 
*/
public class STARConnection
{
private TelnetConnection conn;
private string output;
private string command;
private string prompt;
/**
* Instantiates new STARConnection. <br/>
* Recommended login timeout is 2000. <br/>
* Recommended overall timeout is 500. <br/>
* Throws SocketException, PromptException, LoginException
* 
* @param [in] string username:Username for login
* @param [in] string password:Password for login
* @param [in] int loginTimeout:timeout milliseconds for login
* @param [in] int overallTimeout:timeout milliseconds for session
*/
public STARConnection(string username, string password, int loginTimeout, int overallTimeout)
{
output = "";
conn = new TelnetConnection("HOSTHOSTHOST", 23);
this.SetTimeout(overallTimeout);
try
{
output = conn.Login(username, password, loginTimeout);
if(output.Contains("You entered an invalid login name or password"))
{
throw new LoginException("Failed to login");
}
this.ParsePrompt();
}
catch(Exception e)
{
if(e.Message.Contains("login prompt"))
{
throw new PromptException("Login", "Could not find login prompt");
}
else if(e.Message.Contains("password prompt"))
{
throw new PromptException("Password", "Could not find password prompt");
}
else
{
throw e;
}
}
}
/**
* Sets the timeout for the session in milliseconds
* @param [in] int timeout:timeout for session
*/
public void SetTimeout(int timeout)
{
conn.MainTimeOutMs = timeout;
conn.TimeOutMs = timeout;
}
/**
* Gets the current timeout for the session in milliseconds
* @param [out] int:timout for session
*/
public int GetTimeout()
{
return conn.TimeOutMs;
}
/**
* Writes a command to the STAR session
* @param [in] string command:command to write
*/
public void Write(string command)
{
this.command = command;
conn.Write(this.command);
this.command = this.command.Replace("\n", "{newLine}");
}
/**
* Writes a command followed by a new line (\n) to the STAR session
* @param [in] string command:command to write
*/
public void WriteLine(string command)
{
this.command = command;
conn.WriteLine(this.command);
this.command += "{newLine}";
}
/**
* Reads output from STAR session. Assumes no data within given timeout denotes end of stream
* @param [out] string:output from STAR session
*/
public string Read()
{
output = conn.Read();
this.ParsePrompt();
return output;
}
/**
* Reads output from STAR session with timeout changed for only this read. Assumes no data within
* timeout denotes end of stream.
* @param [in] int timeout:timeout for this read only
* @param [out] string:output from STAR session
*/
public string Read(int timeout)
{
int temp = this.GetTimeout();
this.SetTimeout(timeout);
this.Read();
this.SetTimeout(temp);
return output;
}
/*
* Parse prompt from output
*/
private void ParsePrompt()
{
prompt = output.Substring(output.LastIndexOf("\n") + 1);
}
/**
* Gets output from last read
* @param [out] string:output from last read
*/
public string GetOutput()
{
return output;
}
/**
* Gets last command entered
* @param [out] string:last command entered
*/
public string GetCommand()
{
return command;
}
/**
* Gets prompt from last read
* @param [out] string:last prompt
*/
public string GetPrompt()
{
return prompt;
}
/**
* Checks for connection
* @param [out] bool:connection status
*/
public bool IsConnected()
{
return conn.IsConnected;
}
}
/**
* Exception for failed logins
*/
class LoginException: Exception
{
private string offender = "";
public LoginException() : base() { }
public LoginException(string message) : base(message) { }
/**
* Creates exception
* @param string offender:element causing exception
* @param string message:exception message
*/
public LoginException(string offender, string message)
: base(message)
{
this.offender = offender;
}
/**
* To String method for getting exception string
* @param [out] string:string representation of exception
*/
public override string ToString()
{
if(offender == "")
{
return this.GetType() + ": "+this.Message+"\n"+this.StackTrace;
}
else
{
return "Incorrect login: " + offender + "--" + this.Message + "\n" + this.StackTrace;
}
}
}
/**
* Exception for failed STAR prompts
*/
class PromptException: Exception
{
private string prompt = "";
public PromptException() : base(){ }
public PromptException(string message) : base(message){ }
/**
* Creates exeption
* @param string prompt:prompt causing exception
* @param string message:exception message
*/
public PromptException(string prompt, string message)
: base(message)
{
this.prompt = prompt;
}
/**
* To String method for getting exception string
* @param [out] string:string representation of exception
*/
public override string ToString()
{
if(prompt == "")
{
return this.GetType() + ": " + this.Message + "\n" + this.StackTrace;
}
else
{
return "Prompt failed: " + prompt + "--" + this.Message + "\n" + this.StackTrace;
}
}
}
}

AssemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
//General Information about an assembly is controlled through the following 
//set of attributes. Change these attribute values to modify the information
//associated with an assembly.
[assembly: AssemblyTitle("STARTelnet")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("COMPANY")]
[assembly: AssemblyProduct("STARTelnet")]
[assembly: AssemblyCopyright("Copyright © COMPANY 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//Setting ComVisible to false makes the types in this assembly not visible 
//to COM components.  If you need to access a type in this assembly from 
//COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]
//The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("d7ae512d-c840-4ebc-8057-73a10f286225")]
//Version information for an assembly consists of the following four values:
//
//     Major Version
//     Minor Version 
//     Build Number
//     Revision
//
//You can specify all the values or you can default the Build and Revision Numbers 
//by using the '*' as shown below:
//[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Essayez de compiler votre assemblée .NET 4.0. Cela est nécessaire pour certaines compliqué raison sur la façon regasm enregistre et utilise des assemblages à partir de différentes versions de .NET. Essayez également de décorer votre classe avec COMVisible(true) attribut, peut-être que les paramètres de comvisibility pour l'assemblage n'est pas assez. Êtes-vous à l'aide de commutateur /base de code lors de l'inscription?
J'ai à compiler dans un .NET 2.0 pour assurer la compatibilité des questions. Je ne suis pas à l'aide de /base de code, mais j'ai remarqué qu'avant. Quel est son but?
/base de code est requis lorsque vous ne sont pas de mettre assembly dans le GAC de sorte qu'il sera utilisé à partir de son emplacement actuel. Si vous souhaitez un assembly dans le GAC, vous devez attribuer de nom fort.
Ce qui serait considéré comme un nom fort? Est la convention de nommage j'utilise assez qualifié?
nom fort est un jeton spécial, ici msdn.microsoft.com/en-us/library/xc31ft41.aspx

OriginalL'auteur steventnorris | 2012-04-02