C# 引用同名程序集的项目

C# 引用同名程序集的项目,c#,C#,我有项目沙盒和沙盒库(沙盒库以前是沙盒,只是复制到磁盘上,重命名文件夹并打开)。我在SandBoxLibrary中添加了一些库函数,构建了它,并将DLL复制到了SandBox中。现在在SandBox中,我引用了SandBoxLibrary DLL,从那里调用了public方法(intellisense工作正常),但是当我运行此项目时,我得到了以下错误: Unhandled Exception: System.TypeLoadException: Could not load type 'XT.X

我有项目沙盒和沙盒库(沙盒库以前是沙盒,只是复制到磁盘上,重命名文件夹并打开)。我在SandBoxLibrary中添加了一些库函数,构建了它,并将DLL复制到了SandBox中。现在在SandBox中,我引用了SandBoxLibrary DLL,从那里调用了public方法(intellisense工作正常),但是当我运行此项目时,我得到了以下错误:

Unhandled Exception: System.TypeLoadException: Could not load type 'XT.X' from assembly 'SandBoxBinary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
两个项目具有相同的程序集名称。如果我换一个,它就行了。现在的问题是,我希望编译器对此发出警告/错误,并且我不希望出现运行时未处理的异常。。。有人能解释一下下面的问题吗?规则是什么


谢谢。

正如Hans Passant在评论中指出的,问题在于两个程序集共享相同的名称(即文件名),并且库不在GAC中。当代码被突然编译时,输出目录(即big\Debug)中需要有两个同名的DLL文件——主程序集和库,两者的名称相同。这就是造成问题的原因


当你把所有的部分放在一起时,这是很明显的

错误消息中的SandboxBinary与什么/哪个项目有关?这是一个问题,它们的名称都是相同的…编译器不知道这会出错,也不一定会出错,这场灾难发生在构建的很晚。当MSBuild将依赖程序集复制到生成目录中时。一个覆盖另一个。当其中一个在GAC中时,它不必出错。哦,你是对的,我完全忘记了编译器将所有非GAC引用复制到输出目录中,它们的名称相同,所以我猜它被覆盖了。谢谢