相关疑难解决方法(0)

定位的程序集的清单定义与程序集引用不匹配

我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,我收到以下错误:

System.IO.FileLoadException:无法加载文件或程序集"Utility,Version = 1.2.0.200,Culture = neutral,PublicKeyToken = 764d581291d764f7"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)**

在x.Foo.FooGO()

在Foo.cs中的x.Foo.Foo2(String groupName_):第123行

在FooTests.cs中的x.Foo.UnitTests.FooTests.TestFoo():第98行**

System.IO.FileLoadException:无法加载文件或程序集'Utility,Version = 1.2.0.203,Culture = neutral,PublicKeyToken = 764d581291d764f7'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我查看我的参考资料,我只参考Utility version 1.2.0.203(另一个是旧的).

关于我如何弄清楚试图引用这个旧版本的DLL文件的任何建议?

此外,我认为我的硬盘上甚至没有这个旧组件.有没有工具可以搜索这个旧的版本化程序集?

c# dependencies compiler-errors reference version

715
推荐指数
20
解决办法
93万
查看次数

.NET中API破坏性更改的权威指南

我想尽可能多地收集有关.NET/CLR中API版本控制的信息,特别是API更改如何破坏客户端应用程序.首先,让我们定义一些术语:

API更改 - 类型的公开可见定义的更改,包括其任何公共成员.这包括更改类型和成员名称,更改类型的基本类型,从类型的已实现接口列表添加/删除接口,添加/删除成员(包括重载),更改成员可见性,重命名方法和类型参数,添加默认值对于方法参数,在类型和成员上添加/删除属性,以及在类型和成员上添加/删除泛型类型参数(我错过了什么吗?).这不包括成员团体的任何变化,或私人成员的任何变化(即我们不考虑反射).

二进制级别中断 - 一种API更改,导致针对旧版本API编译的客户端程序集可能无法加载新版本.示例:更改方法签名,即使它允许以与之前相同的方式调用(即:void返回类型/参数默认值重载).

源级别中断 - 一种API更改,导致编写现有代码以针对旧版本的API进行编译,可能无法使用新版本进行编译.然而,已经编译的客户端程序集像以前一样工作.示例:添加一个新的重载,这可能导致前一个明确的方法调用不明确.

源级安静语义更改 - 一种API更改导致编写的现有代码针对旧版API进行编译,从而悄然改变其语义,例如通过调用不同的方法.但是,代码应该继续编译而不会出现警告/错误,以前编译的程序集应该像以前一样工作.示例:在现有类上实现新接口,导致在重载解析期间选择不同的重载.

最终目标是尽可能地对尽可能多的破坏和静默语义API更改进行编目,并描述破坏的确切影响,以及哪些语言受其影响并且不受其影响.扩展后者:虽然一些变化普遍影响所有语言(例如,向接口添加新成员将破坏任何语言中该接口的实现),但有些需要非常特定的语言语义才能进入游戏以获得休息.这通常涉及方法重载,并且通常涉及与隐式类型转换有关的任何事情.似乎没有任何方法可以在这里定义"最小公分母",即使对于符合CLS的语言(即至少符合CLI规范中定义的"CLS使用者"规则的那些语言) - 尽管我会很感激,如果有人在这里纠正我错了 - 所以这必须按语言去语言.那些最感兴趣的东西自然就是开箱即用的.NET:C#,VB和F#; 但其他人,如IronPython,IronRuby,Delphi Prism等也是相关的.它的角落越多,它就越有趣 - 删除成员之类的东西是不言而喻的,但是例如方法重载,可选/默认参数,lambda类型推断和转换运算符之间的微妙交互可能会非常令人惊讶有时.

举几个例子来启动这个:

添加新方法重载

种类:源级休息

受影响的语言:C#,VB,F#

更改前的API:

public class Foo
{
    public void Bar(IEnumerable x);
}
Run Code Online (Sandbox Code Playgroud)

更改后的API:

public class Foo
{
    public void Bar(IEnumerable x);
    public void Bar(ICloneable x);
}
Run Code Online (Sandbox Code Playgroud)

示例客户端代码在更改之前工作并在其之后中断:

new Foo().Bar(new int[0]);
Run Code Online (Sandbox Code Playgroud)

添加新的隐式转换运算符重载

种类:源级休息.

受影响的语言:C#,VB

语言不受影响:F#

更改前的API:

public class Foo
{
    public static implicit operator int ();
}
Run Code Online (Sandbox Code Playgroud)

更改后的API:

public class Foo
{
    public static implicit operator int …
Run Code Online (Sandbox Code Playgroud)

.net versioning api clr cls-compliant

219
推荐指数
10
解决办法
3万
查看次数

C#项目是否可以使用多个.NET版本?

我自学编码,我不确定这是否可行.我也不知道我在这里要求的是什么名称(例如:"你问的是什么叫xxxxxx").我找不到关于这个主题的任何内容(但确实找到了一些升级文章,这不是我想要的,所以请原谅我,如果这听起来像是对核心编码员的NOOB问题;我是初学者).

我有一个依赖.NET 2.0的小项目,因为包含了一些外部库.该软件运行良好,但现在需要增加功能; 在.NET 4.0或4.5下更容易编程的东西.

但是,包括外部库不在.NET级别,所以现在我想知道:一个项目可以有多个.NET版本吗?

我不确定但也在思考也许我只是将我的新函数编写为依赖于.NET 4.5的dll,其中我在不同的项目中编写我的公共函数,然后在我的prj中包含最终的dll依赖于.NET 2.0 ......不确定这是否可行.

.net c#

11
推荐指数
2
解决办法
975
查看次数