title: RegAsm dll .net2.0 to .net4.0
body: <p>I have a dll that registers fine using .Net2.0's regasm, but when attempting to register with a .NET4.0 regasm, I get the error "Could not load file or assembly '<em>FILENAMEHERE</em>' or one of it's dependencies. Operation is not supported. (Exception from HRESULT:  0x8013515
  Code and assembly are below</p>
  
  <p>STARTelnet.cs</p>
  
  <pre><code>/**
  *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. &lt;br/&gt;
           * Recommended login timeout is 2000. &lt;br/&gt;
           * Recommended overall timeout is 500. &lt;br/&gt;
           * 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;
              }
          }
  
      }
  }
  </code></pre>
  
  <p>AssemblyInfo.cs</p>
  
  <pre><code>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")]
  </code></pre>