我有一个名为common的常见项目。 Inside是一个名为ExtensionMethods的类,由遗留应用程序使用。我想将类拆分为多个文件,但保持名称相同。所以我没有public static class ExtensionMethods {}
而是public static partial class ExtensionMethods {}
。
当我删除从部分类创建的新dll时,我正在使用dll的一个遗留应用程序获得Method not found:
异常。是什么造成的?文件名信息是否以某种方式嵌入到dll中?部分类使旧的和新的DLL不兼容吗?这是怎么回事? dll没有版本化,我们没有使用gac。它只是一个简单的dll放在与exe相同的目录中。
更新
感谢大家到目前为止的建议。这是我到目前为止检查的内容
相同的命名空间:检查。
相同的签名:检查。
仍公开:检查。
我可以构建遗留应用程序,它可以毫无错误地构建。
是的,异常告诉我它是什么方法。找不到方法:
'System.Collections.Generic.IEnumerable\`1<!!0> CompanyName.Common.ExtentionMethods.Distinct(System.Collections.Generic.IEnumerable\`1<!!0>, System.Func\`3<!!0,!!0,Boolean>)'.
(可悲的是,“扩展”的拼写错误就是它在代码中的方式。)
我将开始使用大家建议的一些工具来进一步了解。
答案:用户错误。我认为我复制的dll不是我认为我正在构建的新dll。我无法确定是否需要重建或源控制问题或仅仅是我的错误。无论如何,下面的两个答案都是正确的,部分类不是问题,两个答案都有帮助,但最后,我认为是反射器解决方案导致我找到问题。谢谢大家。
答案 0 :(得分:2)
部分类是编译器技巧,仅此而已 - 最终程序集中没有任何有意义的差异。
所以,我认为你的实际问题在于其他地方。
检查您获得的例外的详细信息,并查看该特定方法的来源。
答案 1 :(得分:2)
假设所有类都在同一名称空间中声明,那么它应该绝对正常。检查:
如果您尝试针对新DLL 构建旧版应用程序,会发生什么?这应该表明在编译时缺少方法,这应该会给你一个关于你出错的地方的提示。请注意,大概是“找不到方法”的例外应该告诉你无论如何都找不到方法......