"URI formats are not supported." 异常刚刚开始在非常旧且未更改的代码中显示出来。

10 浏览
0 Comments

"URI formats are not supported." 异常刚刚开始在非常旧且未更改的代码中显示出来。

我遇到了一个非常随机的错误,但我找不到任何原因。我更新的应用程序最初是在许多年前开发的。我在一个庞大的开发团队工作,他们唯一的责任就是管理这个应用程序,我们已经接受了这个项目有点像“科学怪人”一样的事实。我们只是谦逊的开发人员,继承了这个项目的许多开发人员的传统(这一点以后会很重要)。

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

string strPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
string strFile = strPath.Substring(6) + "\\" + FILE_NAME;

这样说吧,我和我的团队成员已经能够修改和构建我们解决方案中更高级别的UI和数据库相关部分很长时间了。我和任何其他人都没有修改上述代码,或者同一代码文件(或者事实上,解决方案中的任何项目)中的任何代码。

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

异常:‘System.ArgumentException’的一个一次性异常发生在mscorlib.dll中

消息:不支持URI格式。

我已经谷歌了这个错误消息,看起来原始开发人员只是做错了。这似乎是一个常见的错误,但是令我困惑的是,直到今天,这从来都不是一个问题。

我知道这是一个奇怪的问题,但是有没有办法在不修改这段代码的情况下解决它。正如我所提到的,这是一个非常复杂的应用程序,经常感觉有点拼凑而成。我们的团队正试图清理或替换大部分应用程序的功能,但是有些部分我们根本不敢碰,因为我们不确定应用程序在部署到生产环境后会如何工作。这是一个非常关键的应用程序,它不能出问题。

有人知道是什么原因会导致这个问题“神奇地”开始发生吗?特别是因为我一直在处理与UI相关的代码,而不是与这个问题相关的低级别配置解析部分的代码。

附加说明

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

感谢任何帮助。对于这个长篇小说,我很抱歉。我只是被难住了,如果有任何可能,在不同的用户环境中更改此过程可能会有不同的行为,我宁愿不使用其他方法来获取此路径字符串。

0
0 Comments

问题原因:可以假设与项目/解决方案相关的Visual Studio中的某个工作文件已损坏。作者搜索了项目文件和所有代码的文本,但没有找到任何异常。

解决方法:作者使用源代码控制系统尝试修复问题。他拉取了最初用于当前任务的相同源代码版本。然后编译和运行应用程序,发现在“原始”状态下一切正常。

接下来,作者将自己已经修改过的文件复制了一份。由于没有添加新的项目引用或资源,所以他只复制了修改过的.cs文件。然后构建和运行应用程序,从分支中拉取后就没有再遇到问题。

这并没有回答为什么会发生这种情况的问题,但这种方法可以解决问题。

0
0 Comments

问题出现的原因可能是System.Reflection.Assembly.GetExecutingAssembly().CodeBase返回的字符串不被GetDirectoryName方法接受。可以检查项目文件、.sln文件、仓库配置以及可能导致文件位置不同的任何其他因素。如果在这些地方找不到问题,可以检查同一次提交中的其他文件,即使它们看起来与问题无关。"First Chance"异常通常发生在有多个线程同时运行的情况下,因此可以检查是否有新的线程在之前的版本中不存在。还可以检查调试设置的更改情况,因为有可能该问题一直存在,只是直到现在才有了正确的设置来捕获它。请记住,在源代码控制下,其他人可能会无意中更改你的代码。最后,可以考虑该问题可能一直存在,只是直到现在才有正确的设置来捕获它。

0
0 Comments

问题:在非常老的、未更改的代码中突然出现了"URI formats are not supported."的异常。

解决方法:重新构建项目并安装Visual Studio 2013,将项目回退到之前的版本,这样Assembly.CodeBase前缀为"file:"的路径就可以被Path.GetDirectoryName接受而不会出现异常。根据MSDN文档,"file:"路径是不被支持的,但在VS 2015代码中抛出的ArgumentException中没有提到这一点。此外,我还遇到了在VS 2015编译的代码中进行调试时的其他问题,编译器会重命名变量名,导致调试器无法识别这些变量。

原因:通过安装Visual Studio 2015并在其中重新构建项目,.NET 4.6版本引入了Path.GetDirectoryName中的Path.GetDirectoryName的更改。

让我们来整理一下:

问题:在非常老的、未更改的代码中突然出现了"URI formats are not supported."的异常。

解决方法:重新构建项目并安装Visual Studio 2013,将项目回退到之前的版本,这样Assembly.CodeBase前缀为"file:"的路径就可以被Path.GetDirectoryName接受而不会出现异常。根据MSDN文档,"file:"路径是不被支持的,但在VS 2015代码中抛出的ArgumentException中没有提到这一点。此外,我还遇到了在VS 2015编译的代码中进行调试时的其他问题,编译器会重命名变量名,导致调试器无法识别这些变量。

原因:通过安装Visual Studio 2015并在其中重新构建项目,.NET 4.6版本引入了Path.GetDirectoryName中的Path.GetDirectoryName的更改。

0