vs 奇怪的行为……
大家好!
谁能解释一下,怎么可能?
谢谢,亚历克斯。
我仍然觉得链接的答案有点难以接受,特别是因为 OP 承认他实际上没有与 EXE 同名的 DLL。我也无法复制它。
但是,这个解释有一些可信度,我注意到当要求 Fusion 搜索程序集时,它会做一些奇怪的事情。您可以在使用 Fuslogvw.exe 时看到这一点,启用“记录所有绑定”选项。奇怪的是,当被要求加载程序集时,它会同时搜索 DLL 和EXE。以下是测试控制台应用程序日志条目的片段:
LOG: Attempting download of new URL file:///C:/projects/ConsoleApplication3/bin/Debug/ConsoleApplication3.DLL.
LOG: Attempting download of new URL file:///C:/projects/ConsoleApplication3/bin/Debug/ConsoleApplication3/ConsoleApplication3.DLL.
LOG: Attempting download of new URL file:///C:/projects/ConsoleApplication3/bin/Debug/ConsoleApplication3.EXE.
LOG: Assembly download was successful. Attempting setup of file: C:\projects\ConsoleApplication3\bin\Debug\ConsoleApplication3.exe
LOG: Entering run-from-source setup phase.
向右滚动以查看它首先如何查找 DLL。以及它在与程序集同名的子目录中的外观。DLL Hell 的奇怪而巨大的潜力在这里。使用 CLR 以某种方式探测 [STAThread] 属性的错误程序集的故障模式。还解释了对 Connect 反馈文章的奇怪“作为外部关闭”驳回,Fusion 归 Microsoft 的 Windows 小组所有,而不是 DevDiv。
Anyhoo,迹象表明,只需重命名输出文件即可解决您的问题。项目+属性,构建选项卡,输出路径设置。
我不是调试器内部工作的专家,但我认为监视窗口中显示的值是由 Visual Studio 线程评估的,而不是应用程序的主线程(在屏幕截图中暂停)。
因此我没有看到矛盾,监视窗口只是说 Visual Studio 线程是 MTA。
尝试使用Debug.Write
来显示主线程的单元状态。