我有以下类型(见下面的代码的一部分)。它被编译但RegAsm提供了以下错误:“方法‘LoadContent’型的‘MyAlgorithms.MyAlgorithm’从组件‘A’不具有实现”

有任何想法,为什么?如果我不会实现LoadContent()方法它不会被编译。

我看到了几乎同样的问题,在这里: TypeLoadException说“不执行”,但它的实现 但它并没有帮助,因为:

A,B和C的项目是在相同的溶液中,生成顺序是C,B和A

所有项目的“生成后事件命令行”包含下一行:

“C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ RegAsm.exe”/ U $(TARGETPATH)结果 “C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ RegAsm.exe” $(TARGETPATH)结果 “C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \ BIN \的Gacutil.exe”/ U $(的TargetName)的结果 “C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \ BIN \的Gacutil.exe”/如果$(TARGETPATH)

所以,我认为项目A指到正确的组件。

和为什么求解如果我加入MyAlgorithmBase类问题下一:

保护覆盖无效LoadContent(PersistenceReader读者){}

谢谢!

凯特

// 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。其可产生旧版本的依赖组件的基础上,在所述基准组件的[的AssemblyVersion]号码。

解决此与Fuslogvw.exe,记录所有的结合。这表明你,每一个组件是从哪里来的。

通过的的把你的组件在GAC保持这种麻烦的了。这是一个部署的细节和你的dev的机器,其中集版本可以迅速改变,尤其是当你让编译系统自动增加他们在不恰当的。您可以通过使用Regasm.exe的/代码库选项这么做

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top