jjzjj

c# - Miniprofiler 在缺少 CreatedOn 列时中断

coder 2024-05-30 原文

我在我的 EF 6.1 网络应用程序 (asp.net-mvc) 中安装了 miniprofiler,它在一行中中断并显示以下错误消息:

An exception of type 'System.Data.SqlClient.SqlException' occurred in MiniProfiler.dll but was not handled in user code

Additional information: Invalid column name 'CreatedOn'.

为什么会这样?我过去使用的是 EF 5,并在 6.1 上升级到版本 6 和更高版本。

Thisthis帖子有一些解决方法,并且还说当您从 4.3 版升级时会发生这种情况。我的网络应用程序不是这种情况。

有没有人真的通过不解决它来修复这个错误?

最佳答案

我认为调试器中断是因为 PDB 文件包含在 MiniProfiler NuGet 包中。

当 Entity Framework 在尝试确定 __MigrationHistory 表中是否存在列 CreatedOn 时抛出异常时,就会发生中断。 (使用 IlSpy 从 System.Data.Entity.Migrations.History.HistoryRepository.GetUpgradeOperations() 中提取的代码)

bool flag = false;
try
{
    this.InjectInterceptionContext(legacyHistoryContext);
    using (new TransactionScope(TransactionScopeOption.Suppress))
    {
        (
            from h in legacyHistoryContext.History
            select h.CreatedOn).FirstOrDefault<DateTime>(); // Will throw an exception if the column is absent
    }
    flag = true;
}
catch (EntityException)
{
}
if (flag)
{
    // Remove the column if present (if no exception was thrown)
    yield return new DropColumnOperation("dbo.__MigrationHistory", "CreatedOn", null);
}

您会注意到,如果您手动创建列来避免异常,它会在下次运行时被删除,异常会再次出现。 由于MiniProfiler将自身插入到DbCommand.ExecuteReader()中,它在catch之前的异常路径上(linq查询转化为sql查询,最后使用DbCommand执行)。

你有两个解决方案来防止中断发生:

针对该类型的异常禁用中断

您可以在 Visual Studio 调试器中禁用对特定异常的中断。 我正在使用 Sql CE,所以我必须首先声明 SqlCeException(第 2 步到第 4 步)。如果您使用的是 SqlServer,则可以跳过此步骤,只需检查抛出的异常类型是否已在列表中。

  1. 打开“异常”对话框(菜单调试/异常)
  2. “添加...”按钮,选择“通用语言运行时异常”作为类型。
  3. 将异常名称设置为“System.Data.SqlServerCe.SqlCeException”
  4. 验证并保持“异常(exception)”对话框打开。
  5. 打开列表中的“公共(public)语言运行时异常”部分。
  6. 取消选中 System.Data.SqlServerCe.SqlCeException 前面的两个复选框(或在您的案例中抛出的异常)并关闭对话框。

从现在开始,异常不应导致中断。 但是,调试器不会在您自己的代码中打断,如果 MiniProfiler 在另一种情况下抛出另一种类型的异常,则会再次发生打断。

删除 PDB 文件

您可以删除 MiniProfiler PDB 的文件,但您必须删除 NuGet 引用:

  1. 找到并制作 MiniProfiler dll 的副本(从项目的 bin 文件夹中)。当然,不要复制 pdb 文件。
  2. 删除对 MiniProfiler 的所有 NuGet 引用。
  3. 添加对已复制到不同文件夹的 dll 的引用。

缺点是您将无法使用 NuGet 更新 MiniProfiler。

也许更好的解决方案是从 NuGet 包中删除 PDB,但我不知道它们是否需要用于其他目的。

编辑

正如 jrummell 在他的评论中指出的那样,可以使用构建后事件删除 PDB 的文件。这样您就可以保留您的 NuGet 引用。

关于c# - Miniprofiler 在缺少 CreatedOn 列时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23587321/

有关c# - Miniprofiler 在缺少 CreatedOn 列时中断的更多相关文章

  1. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  2. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  5. c# - C# 中的 Flatten Ruby 方法 - 2

    我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume

  6. ruby - 可以像在 C# 中使用#region 一样在 Ruby 中使用 begin/end 吗? - 2

    我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用

  7. c# - Ruby 等效于 C# Linq 聚合方法 - 2

    什么是Linq聚合方法的ruby​​等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj

  8. c# - 先学什么? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion几年前我去学校学习编程,毕业后我找到了一份系统管理方面的工作,这就是我职业生涯的方向。我想重新开始某种开发,并且一直在“玩”C#和ASP.NET,但我已经听到很多关于其他"new"语言的讨论(新的意思是它们是新的)我)喜欢Ruby和F#。我想我想知道我是否在浪费时间学习主要的MS语言,而不是成为一名通才。很长一段时间没有离开开发社区(如果我曾经离开过的话)让我在潮流中挣扎,我不想落在时代的

  9. c# - 在 C# 中重现 Ruby OpenSSL private_encrypt 输出 - 2

    我有一个简单的Ruby脚本,我用它在某些HTTPheader上执行private_encrypt以签署要发送到ruby​​RESTAPI的Web请求,该API会根据Base64编码字符串测试Base64编码字符串生成而不是解码Base64和解密数据然后测试原始字符串。我使用的脚本是require"openssl"require"base64"path_to_cert=ARGV[0].dupplain_text=Base64.decode64(ARGV[1].dup)private_key=OpenSSL::PKey::RSA.new(File.read(path_to_cert))pu

  10. Ruby 缺少常量表达式优化? - 2

    我希望Ruby的解析器会进行这种微不足道的优化,但似乎并没有(谈到YARV实现,Ruby1.9.x、2.0.0):require'benchmark'deffib1a,b=0,1whileb由于这两种方法除了在第二种方法中使用预定义常量而不是常量表达式外是相同的,因此Ruby解释器似乎在每个循环中一次又一次地计算幂常数。是否有一些Material说明为什么Ruby根本不进行这种基本优化或只在某些特定情况下进行? 最佳答案 很抱歉给出了另一个答案,但我不想删除或编辑我之前的答案,因为它下面有有趣的讨论。正如JörgWMittag所说,

随机推荐