如何使 NuGet 抛出的异常出现在方法调用处?
How to make a NuGet thrown exception appear at the method call?
当您在编码时遇到如下错误,您会在尝试出错的代码行收到错误。
File.ReadAllText("nonexistent_file.txt");
作为参考,在 Visual Studio 社区中,它看起来像这样:
Normal unhandled exception
但是,我正在设计一个 NuGet 程序包(如 DLL),有时我想在用户尝试将无效字符串传递给函数时抛出异常,如 ArgumentException
。但是,当我将其编码到 NuGet 中然后继续使用无效字符串时,异常会将我带到 NuGet 中我抛出异常的代码行,而不是我尝试出错的代码行。
例如:NuGet thrown exception
我很好奇为什么 Visual Studio 将我带到 NuGet 代码中的函数,而不是我进行无效调用的地方。知道我在这里做错了什么吗?
你的 nuget 包是抛出异常的地方,所以这就是代码将中断并且 VS 将跳转到的地方。如果要在调用nuget包中方法的方法内部中断,则需要处理异常并重新抛出。
即
try {
DoSomethingInMyNugetPackage();
} catch(TheNugetException ex) {
throw; // <<< code will now break here with the same exception, rather than inside the nuget package
}
如果VisualStudio可以为你的dll(.pdb文件)找到符号,如果它可以找到匹配符号的源代码,并且你没有打开“Just My Code”,它会尽量直接跳转到抛出异常的地方。
如果您没有在您的 NuGet 包中包含 pdb 文件(您可能没有),那么您看到的效果只会以您作为 NuGet 包的原始开发人员的身份出现, 但对其他人不适用。
或者您引用的是项目而不是包,我在您的问题中看不到。
当您在编码时遇到如下错误,您会在尝试出错的代码行收到错误。
File.ReadAllText("nonexistent_file.txt");
作为参考,在 Visual Studio 社区中,它看起来像这样: Normal unhandled exception
但是,我正在设计一个 NuGet 程序包(如 DLL),有时我想在用户尝试将无效字符串传递给函数时抛出异常,如 ArgumentException
。但是,当我将其编码到 NuGet 中然后继续使用无效字符串时,异常会将我带到 NuGet 中我抛出异常的代码行,而不是我尝试出错的代码行。
例如:NuGet thrown exception
我很好奇为什么 Visual Studio 将我带到 NuGet 代码中的函数,而不是我进行无效调用的地方。知道我在这里做错了什么吗?
你的 nuget 包是抛出异常的地方,所以这就是代码将中断并且 VS 将跳转到的地方。如果要在调用nuget包中方法的方法内部中断,则需要处理异常并重新抛出。
即
try {
DoSomethingInMyNugetPackage();
} catch(TheNugetException ex) {
throw; // <<< code will now break here with the same exception, rather than inside the nuget package
}
如果VisualStudio可以为你的dll(.pdb文件)找到符号,如果它可以找到匹配符号的源代码,并且你没有打开“Just My Code”,它会尽量直接跳转到抛出异常的地方。
如果您没有在您的 NuGet 包中包含 pdb 文件(您可能没有),那么您看到的效果只会以您作为 NuGet 包的原始开发人员的身份出现, 但对其他人不适用。
或者您引用的是项目而不是包,我在您的问题中看不到。