Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何停止类库生成.EXE文件并导致TypeLoadException异常?_C#_Dll_Exe_Class Library_Typeloadexception - Fatal编程技术网

C# 如何停止类库生成.EXE文件并导致TypeLoadException异常?

C# 如何停止类库生成.EXE文件并导致TypeLoadException异常?,c#,dll,exe,class-library,typeloadexception,C#,Dll,Exe,Class Library,Typeloadexception,我的解决方案中出现了一个非常奇怪的错误,我的一个项目是类库,它导致引用它的项目抛出TypeLoadException。我已经看过了各种各样的答案,最接近我的问题是 这个答案让我产生了一个问题,如果这是我的问题,在调试文件夹中进行一些挖掘,我发现引用我的类库的项目正在生成一个同名的DLL和EXE,这可能是我的问题吗 如果是这样的话,我该如何解决这个问题呢?我的解决方案中还有其他类库,它们在这个项目中也被引用。它们不会同时生成DLL和EXE文件。在project->YourProjectName P

我的解决方案中出现了一个非常奇怪的错误,我的一个项目是类库,它导致引用它的项目抛出TypeLoadException。我已经看过了各种各样的答案,最接近我的问题是

这个答案让我产生了一个问题,如果这是我的问题,在调试文件夹中进行一些挖掘,我发现引用我的类库的项目正在生成一个同名的DLL和EXE,这可能是我的问题吗


如果是这样的话,我该如何解决这个问题呢?我的解决方案中还有其他类库,它们在这个项目中也被引用。它们不会同时生成DLL和EXE文件。

在project->YourProjectName Properties->Application下,确保将Output Type设置为class Library

在Project->YourProjectName属性->应用程序下,确保输出类型设置为类库

我不相信这一点,但我已经通过一位同事找到了原因,希望这能帮助其他遇到这个好朋友的人

原因是我引用类库的项目具有相同的程序集名称,我一直在重新调整名称空间,但没有注意到我的主项目具有相同的名称,这意味着,当我的代码生成时,编译器为我的主项目创建了一个EXE,为我的类库创建了一个DLL,这反过来又强制执行TypeLoadException,因为编译器已经加载了同名的EXE


我的代码正在运行。感谢所有花时间发帖的人。

我不相信这一点,但我已经通过一位同事找到了原因,希望这能帮助其他遇到这个好问题的人

原因是我引用类库的项目具有相同的程序集名称,我一直在重新调整名称空间,但没有注意到我的主项目具有相同的名称,这意味着,当我的代码生成时,编译器为我的主项目创建了一个EXE,为我的类库创建了一个DLL,这反过来又强制执行TypeLoadException,因为编译器已经加载了同名的EXE

我的代码正在运行。感谢所有花时间发帖的人

我的类库正在生成同名的DLL和EXE

是的,这导致了这个问题。通过运行Fuslogvw.exe并记录所有绑定,您可以很容易地看到它。这是Fusion的一个有点奇怪的特性,但是当它查找程序集时,它只查看文件名而忽略扩展名。它将接受一个.dll和一个.exe作为它正在寻找的程序集的可接受匹配项。如果DLL和EXE包含托管代码,则它们之间没有真正的区别。例如,完全支持引用EXE

无法强制加载程序以不同方式执行此操作。否则,解决方法应该很简单,只需确保生成不同的程序集名称即可

我的类库正在生成同名的DLL和EXE

是的,这导致了这个问题。通过运行Fuslogvw.exe并记录所有绑定,您可以很容易地看到它。这是Fusion的一个有点奇怪的特性,但是当它查找程序集时,它只查看文件名而忽略扩展名。它将接受一个.dll和一个.exe作为它正在寻找的程序集的可接受匹配项。如果DLL和EXE包含托管代码,则它们之间没有真正的区别。例如,完全支持引用EXE


无法强制加载程序以不同方式执行此操作。否则解决方法应该很简单,只需确保生成一个不同的程序集名称。

感谢您的回复,我已经找到了原因并发布了,但是为了完整性,我的项目被设置为类库。感谢您的回复,我已经找到了原因并发布了,然而,为了完整性,我的项目被设置为类库。是的,通过我的同事,由于某种原因关闭了,我解决了这个问题,只是程序集的EXE和DLL名称相同这一事实一开始让我感到困惑。是的,通过我的同事,由于某种原因关闭了我解决了这个问题,一开始,只是程序集的EXE和DLL名称相同这一事实让我感到困惑。