RegAsm: Methode ‚Loadcontent‘ in type ‚MyAlgorithms.MyAlgorithm‘ von Assembly ‚A‘ nicht über eine Implementierung

StackOverflow https://stackoverflow.com/questions/4606246

Frage

Ich habe folgende Typen (siehe Code-Teil unten). Es wird erstellt, aber RegAsm gibt die folgende Fehlermeldung: "Die Methode 'Loadcontent' in Typ 'MyAlgorithms.MyAlgorithm' aus Assembly 'A' hat keine Implementierung"

Hat eine Idee, warum? Wenn ich nicht implementiert Loadcontent () Methode wäre es nicht kompiliert werden würde.

sehe ich eine fast gleiche Frage, hier: Type sagt ‚keine Umsetzung‘, aber es wird umgesetzt aber es hat nicht geholfen, denn:

A, B und C-Projekte sind in der gleichen Lösung, und die Erstellungs Ordnung C, B und A.

„Postbuildereignis Befehlszeile“ alle Projekte enthält die folgenden Zeilen:

"C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ RegAsm.exe" / u $ (TargetPath)
"C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ RegAsm.exe" $ (TargetPath)
"c: \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ bin \ gacutil.exe" / u $ (Targetname)
"c: \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ bin \ gacutil.exe" / if $ (TargetPath)

Also ich denke Projekt A bezieht sich auf die richtigen Baugruppen.

Und warum löst das Problem, wenn ich MyAlgorithmBase Klasse hinzugefügt die nächste:

protected override void Loadcontent (PersistenceReader Leser) {}

Danke!

kate

// C.dll from project C
namespace Microsoft.SqlServer.DataMining.PluginAlgorithms
{
 public abstract class AlgorithmBase : IDisposable
 {
  //....
  protected abstract void LoadContent(PersistenceReader reader);
 }
}

//in B.dll from project B, refers C.dll
namespace AlgorithmCommons
{
 public abstract class MyAlgorithmBase : AlgorithmBase
 {
  //....
  // Why solves the problem if the next line is commented out?
  // protected override void LoadContent(PersistenceReader reader) { }
 }
}

//in A.dll from project A, refers B.dll and C.dll

namespace MyAlgorithms
{
 public class MyAlgorithm : MyAlgorithmBase
 {
  protected override void LoadContent(PersistenceReader reader)
  {
  //....
  }
 }
}
War es hilfreich?

Lösung

Der Compiler überprüft diese. Was fast sicher bedeutet, dass während der Laufzeit, wenn Regasm.exe Lasten der Montage, ist es nicht laden die Versammlung denken, es tut. Es gibt reichlich Gelegenheit für diese, da Sie die GAC verwenden. Die eine alte Version einer abhängigen Assembly erzeugen kann, basierend auf einer [Assembly] Nummer in der Referenzanordnung.

Fehlerbehebung dies mit Fuslogvw.exe, melden alle bindet. Es zeigt Ihnen, wo jede Versammlung kam.

Der Aufenthalt von dieser Art von Schwierigkeiten, indem nicht Ihre Assemblys im GAC setzen. Es ist ein Detail Bereitstellung und nicht auf Ihrer dev Maschine geeignet, wenn Montag Versionen schnell ändern können, vor allem, wenn Sie das Build-System automatisch erhöhen sie lassen. Sie tun dies, indem Sie die / codebase Option für Regasm.exe mit

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top