Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# &引用;不支持URI格式;异常开始出现在非常旧的、未更改的代码中_C#_.net_Visual Studio 2013_Exception Handling_Mscorlib - Fatal编程技术网

C# &引用;不支持URI格式;异常开始出现在非常旧的、未更改的代码中

C# &引用;不支持URI格式;异常开始出现在非常旧的、未更改的代码中,c#,.net,visual-studio-2013,exception-handling,mscorlib,C#,.net,Visual Studio 2013,Exception Handling,Mscorlib,好吧,我遇到了一个真正的随机错误,我找不到任何原因来解释为什么会发生这种情况。我有一个我更新的应用程序,它是多年前开发的。我在一个相当大的开发团队中工作,他们的唯一责任就是管理这个应用程序,我们已经接受这个项目有点像“弗兰肯代码”项目。我们只是继承了这个项目的几代开发人员中谦逊的开发人员。(稍后了解这一点很重要。) 我们的应用程序有一部分在初始化过程中调用以下代码: string strPath = System.IO.Path.GetDirectoryName(System.Reflectio

好吧,我遇到了一个真正的随机错误,我找不到任何原因来解释为什么会发生这种情况。我有一个我更新的应用程序,它是多年前开发的。我在一个相当大的开发团队中工作,他们的唯一责任就是管理这个应用程序,我们已经接受这个项目有点像“弗兰肯代码”项目。我们只是继承了这个项目的几代开发人员中谦逊的开发人员。(稍后了解这一点很重要。)

我们的应用程序有一部分在初始化过程中调用以下代码:

string strPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
string strFile = strPath.Substring(6) + "\\" + FILE_NAME;
事情是这样的。我的团队成员和我自己都能够修改和构建解决方案中与UI和DB相关的更高级别部分,这是一个永恒的过程。一、 也没有任何其他人修改了上述代码或同一代码文件(或解决方案中的项目)中的任何代码

然而,今天在我的应用程序的一个完全不同的部分工作时,我开始出现一些非常奇怪的“内存不足”异常错误。我不确定这是否与我的问题有关,但我觉得值得一提的是,在重新启动我的机器并重新加载VS解决方案后,当我尝试运行调试器测试时,当初始化过程尝试执行上述代码片段时,我现在始终会遇到以下异常:

异常:在mscorlib.dll中发生“System.ArgumentException”类型的第一次意外异常 消息:不支持URI格式

我在谷歌上搜索了这个错误消息,看起来原来的开发人员只是做错了。这似乎是一个问题,但让我困惑的是,直到今天,这才成为一个问题

我知道这是一个奇怪的问题,但是有没有一种方法可以在不修改代码的情况下解决这个问题呢。正如我所提到的,这是一个非常复杂的应用程序,通常感觉有点拼凑。我们的团队正在尝试清理或替换大部分应用程序功能,但有些部分我们根本不涉及,因为我们不清楚应用程序部署到生产环境后将如何工作。这是一个高度关键的应用程序,不能被破坏

有人知道是什么导致了这一切“神奇地”开始发生吗?特别是因为我一直在处理与UI相关的代码,而这些代码都来自于低级别的配置解析代码部分

附加说明
  • 我们使用源代码控制。如果我下载、构建并运行较旧版本的应用程序,它就会工作
  • 我们使用AnkhSVN,当我检查更改的文件时,同样,没有任何更改与现在失败的代码相关
  • 我的团队中没有其他人见过这种情况
  • 据我所知,我没有调整任何与我的项目相关的设置。我已经查看了我的项目属性,一切看起来都很正常。我想可能是我按了一些奇怪的组合键,并通过快捷键启用/禁用了某些内容,但我不知道这可能是什么

感谢您的帮助。对不起,这本小说。我只是被难住了,如果在不同的用户环境中更改此过程可能会有不同的行为,我不想使用不同的方法来获取此路径字符串。

首先,了解此情况发生的版本有多少:从当前版本开始,并逐个变更集处理变更集,直到不再出现故障

无论出于何种原因,
System.Reflection.Assembly.getExecutionGassembly().CodeBase
现在返回一个
GetDirectoryName
不喜欢的字符串。因此,请检查项目文件、
.sln
、repo配置以及可能导致文件位于不同位置的任何内容

如果在那里找不到任何内容,请检查同一提交中的其他文件,即使它们看起来不应该相关

第一次机会异常通常发生在发生多个线程时,因此请检查以前版本中没有的新线程。我也遇到过这样的情况,第一次偶然的异常只会在某些情况下被捕获,否则会被默默地忽略,所以请查看调试设置中的更改:这个问题可能一直存在,只是到现在为止您还没有正确的设置来捕获它


请记住,在源代码管理下,其他人可以更改属于“您”的内容,即使只是出于意外。

我只能假设Visual Studio中与项目/解决方案相关的某些工作文件已损坏。我搜索了我的项目文件文本和所有代码,没有发现任何不合适的地方

正如我提到的,我们使用源代码管理。为了尝试修复,我删除了最初为当前任务提取的源代码修订版。我编译并运行了应用程序。一切都在“普通”状态下正常工作

接下来,我复制了我知道我修改过的所有文件。我没有添加任何新的项目引用或资源,所以我只是复制了修改后的
.cs
文件。我构建并运行了这个应用程序,自从从我的分支中撤出以来,我没有遇到任何问题


这并不能回答为什么会发生这种情况的问题,但此方法可以提供问题的解决方案。

我可以确认,在安装VS 2015并在其中重建项目后,Path.GetDirectoryName发生了此更改,因此它将成为.NET 4.6功能。 在VS 2013中再次重建项目将返回先前的行为,其中Path.GetDirectoryName可以接受带有“file:”前缀的Assembly.CodeBase,没有任何异常。 但在重读MSDN文档时,有一句话说“file:”路径不受支持,但这是不受支持的