RegAsm:方法LoadContent'型“MyAlgorithms.MyAlgorithm”自组装“A”没有一个实现
-
25-09-2019 - |
题
我有以下类型(见下面的代码的一部分)。它被编译但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的/代码库选项这么做