REPARM: метод «LASTContent» в типе «Myalgorithms.myalgorithm» из сборки «A» не имеет реализации

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

Вопрос

У меня есть следующие типы (см. Часть кода ниже). Он скомпилирован, но Regasm дает следующую ошибку: «Метод« MASTContent »в типе «Мяалгоритмы.Мьялгоритм» от сборки «A» не имеет реализации. "

Есть идеи почему? Если бы я не был реализован метод LASTContent (), он не будет скомпилирован.

Я видел почти такой же вопрос, здесь:TypeLoadexception говорит: «Нет реализации», но это реализованоНо это не помогло, потому что:

A, B и C проекты находятся в одном решении, а порядок сборки C, B и A.

«Командная строка события после сборки» всех проектов содержит следующие строки:

«C: Windows Microsoft.net framework v2.0.50727 Regasm.exe» / u $ (TargetPath)
«C: Windows Microsoft.net framework v2.0.50727 Regasm.exe» $ (TargetPath)
«C: Program Files Microsoft Sdks Windows v6.0a bin gacutil.exe» / u $ (targetname)
«C: Program Files Microsoft Sdks Windows v6.0a bin gacutil.exe» / если $ (TargetPath)

Так что я думаю, что проект A относится к правильным собраниям.

И зачем решает проблему, если я добавил в класс Myalgorithmbase следую:

Защищенное переопределить пустотный нагрузчик (PersistenceReader Reader) {}

Спасибо!

Катя

// 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)
  {
  //....
  }
 }
}
Это было полезно?

Решение

Компилятор проверяет это. Что почти наверняка означает, что во время выполнения, когда Regasm.exe загружает сборку, она не загружает сборку, вы думаете, что это делает. Есть много возможностей для этого, так как вы используете GAC. Которые могут создавать старую версию зависимой сборки, основанную на номере [AssockersionVersion] в эталонной сборке.

Устранить это с fuslogvw.exe, воспользуйтесь всеми связующими. Это показывает, где появилась каждая сборка.

Остаться из такого рода неприятностей нет Положить свои сборки в GAC. Это деталь развертывания и не подходит для вашей машины Dev, где версии сборки могут быстро меняться, особенно когда вы позволяете систему сборки автоматически увеличивать их. Вы это делаете, используя опцию / codebase для regasm.exe

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top