小编Pat*_*eam的帖子

如何在使用ASP.NET友好URL时忽略某些路由?

我成功使用ASP.NET友好URL,但我需要忽略特定Foo.aspx页面的路由(因为此页面需要POST数据,并且一旦重新路由POST数据就不再可用了Page_Load()!).

看起来使用ASP.NET友好URL会丢弃任何忽略路由的尝试.一旦使用ASP.NET友好URL路由,即使用于忽略路由的MSDN示例也不起作用:

routes.Ignore("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
Run Code Online (Sandbox Code Playgroud)

而忽略Foo.aspx代码的路径应该是这样的,不是吗?

routes.Ignore("{*fooaspx}", new { fooaspx = @"(.*/)?foo.aspx(/.*)?" });
Run Code Online (Sandbox Code Playgroud)

Global.asax代码如下所示:

public static void RegisterRoutes(RouteCollection routes) {

    // This doesn't work whether I put this code before or after ASP.NET Friendly URLs code.
    routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });

    routes.Canonicalize().Lowercase();

    var settings = new FriendlyUrlSettings();
    settings.AutoRedirectMode = RedirectMode.Permanent;   
    routes.EnableFriendlyUrls(settings);
}

void Application_Start(object sender, EventArgs e) {
   RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET Friendly URL codeplex网站上已经提出了这个问题,但没有得到答案.

谢谢你的帮助:)

asp.net routes friendly-url

6
推荐指数
1
解决办法
4460
查看次数

在VS Solution Explorer中,如何在源文件子代码元素(类/方法/字段)上扩展右键菜单

我正在开发Visual Studio扩展(VSIX).

我需要在解决方案资源管理器中右键单击类/方法/字段项,在源文件项下找到自定义右键单击菜单:

在此输入图像描述

在.vsct文件中,我已经通过这种方式扩展了Solution Explorer 项目/文件夹/源文件/引用右键菜单:

<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_FOLDERNODE" />
</CommandPlacement>
<CommandPlacement guid="guidNDepend_PackageCmdSet" id="grpSolutionExplorer" priority="0x100">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_REFERENCE" />
</CommandPlacement>    
Run Code Online (Sandbox Code Playgroud)

我尝试了所有其他没有成功的价值观:

IDM_VS_CTXT_CODEWIN
IDM_VS_CTXT_XPROJ_MULTIITEM
IDM_VS_CTXT_XPROJ_PROJITEM
IDM_VS_CTXT_NOCOMMANDS
IDM_VS_CTXT_REFERENCEROOT
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

(请注意,我已经有一些棘手的代码来解析右键单击的代码元素,在调用处理程序IVsSelectionEvents.OnSelectionChanged()之前调用QueryStatus())

menu visual-studio solution-explorer vsix

6
推荐指数
1
解决办法
3155
查看次数

可以将元素添加到 .NET 字典中,跳过内部 ContainsKey() 调用

我知道Dictionary<K,V>.TryAdd().NET Core 2.0 中添加的方法通过在添加元素之前仅检查一次字典是否包含键来提高性能,这与以下方法不同:

if(!dico.ContainsKey(key)) { dico.Add(key,val); } // .Add() calls ContainsKey() a second time
Run Code Online (Sandbox Code Playgroud)

但是出于性能原因,我只想val在以下情况下才进行延迟构建!dico.ContainsKey(key)

if(!dico.ContainsKey(key)) { dico.Add(key, new Value()); }
Run Code Online (Sandbox Code Playgroud)

在这种情况下TryAdd(),由于该值不是延迟构建的,因此会降低性能。

dico.TryAdd(key,new Value());
Run Code Online (Sandbox Code Playgroud)

有没有办法既进行一次ContainsKey()调用延迟构建值?就像是AddWithNoContainsKeyCheck()

if(!dico.ContainsKey(key)) { dico.AddWithNoContainsKeyCheck(key, new Value()); }
Run Code Online (Sandbox Code Playgroud)

.net c# dictionary base-class-library

6
推荐指数
1
解决办法
132
查看次数

NDepend CQL查询缺少IDisposable实现

我意识到这个问题正在寻找的查询不足以找到IDisposable实现的每个小问题,但每个早期警告都很重要,所以我会采取我能得到的.

我想知道是否有人为NDepend提出了一个CQL查询,它将列出所有没有实现IDisposable的类,但是有一个或多个字段.一个类可能通过一个bug(即有人忘了检查IDisposable实现的字段类型)或者通过代码进化(或者某个字段中使用的类在某个地方获得IDisposable)来结束此查询的结果列表.以后的日期没有更新所有用法).

查找未实现IDisposable的所有类的简单查询是:

SELECT TYPES WHERE !Implement "System.IDisposable"
Run Code Online (Sandbox Code Playgroud)

但是,这当然不会检查类是否应该为上述规则实现IDisposable.

有没有人有这样的疑问?我仍然在掌握CQL,所以这部分让我无法理解.

ndepend idisposable cql cqlinq

4
推荐指数
1
解决办法
575
查看次数

GDI +对象生命周期的最佳策略?

在我们的应用程序中,我们有一些GDI +对象,这些对象经常在许多不同的上下文中使用.这包括一些例子Font,SolidBrush(白色,黑色......),有些Pen......

对于那些对象,到目前为止,我们的策略是通过广泛可见的静态只读字段来保存它们.这避免了创建/处置它们数百万的时间.我们当然关注这些对象的线程安全访问(基本上只从UI线程访问它们).

这些GDI +对象中只有少数在应用程序的生命周期中保留,例如200.其他GDI +对象(具有短生命的对象)都尽快处理.但是我们有时会得到意想不到的GDI +资源中断异常,希望很少.

我想知道这些例外是否可以来自这些少数GDI +对象,如果这是一个更明智的策略来创建/处置大量的短寿命GDI +对象.有没有人对这两种策略有实际经验和相关结论?

c# gdi+ idisposable winforms

4
推荐指数
1
解决办法
608
查看次数

以编程方式查找VS2017最近使用(MRU)解决方案和项目

我知道的Visual Studio 2017年现在支持无注册,并排侧所有SKU(企业版,专业版和社区)解释安装在这里.

我们需要访问VS2017最近使用(MRU)解决方案和项目的列表.

对于以前的VS2017版本,我们用于查询注册表.

  • 从VS2017 devenv进程内部运行时,此注册表查询代码仍然正常工作,
  • 但是当它在独立/自定义过程中执行时它不再起作用(我的意思是一个不是VS2017 devenv过程的过程),这就是我们需要做的.

理想情况下,这可以从VS setup API完成,但我找不到任何示例代码.

另外,我们仍然可以依赖RegLoadAppKey()函数,如本VS 2017 破坏性更改文章中所述(欢迎任何代码)

或者可能还有其他API可以做到这一点?

谢谢你的帮助,

mru visual-studio visual-studio-2017

4
推荐指数
1
解决办法
601
查看次数

使用NDepend查看代码度量标准中的趋势

我有一个NDepend版本用于构建服务器,并自动生成NDepend报告.因此,每晚构建都会发挥作用,并生成NDepend报告/ XML.我现在想要做的是跟踪一些时间因素的指标.

因此,例如,在y轴上具有特定类型或命名空间(例如,传入耦合)的图形与x轴上的时间可能是很好的.我知道我可以比较两个NDepend构建并具有代码和度量差异,但我想要做的是比较相同的单个度量或N个构建的度量以查看正在进行的趋势.

我有点假设当前没有一个工具可以做到这一点,而且我必须自己动手,但如果有一个,我肯定喜欢在投入时间之前听到它.那么,NDepend本身是否支持这样的东西,或者是否存在某些我可以使用的实用工具?

除了NDepend之外,我也愿意接受其他可以实现这一目标的技术建议,尽管由于已经投入了NDepend并熟悉它的工作方式,我对NDepend有很强的偏好.

提前致谢.

c# static-analysis ndepend visual-studio-2010 cqlinq

3
推荐指数
1
解决办法
395
查看次数

是否可以在没有“检测到文件修改”对话框的情况下从 VS 包写入当前 VS 解决方案文件

从 VS 包代码中,我想知道是否有一个 API 可以在没有“检测到文件修改”对话框的情况下写入当前打开的 VS 解决方案文件。

检测到 VS 文件修改

我需要写一个自定义GlobalSection

GlobalSection(MyProduct) = preSolution
    MyData = "XYZ"
EndGlobalSection
Run Code Online (Sandbox Code Playgroud)

我知道IVsDocDataFileChangeControl和关联的示例源代码,但似乎解决方案文件对象无法转换为IVsPersistDocData在此输入图像描述

.net c# vspackage visual-studio vsix

3
推荐指数
1
解决办法
1090
查看次数

除了在localhost上之外,将规则重写为WWW

对于SEO优化的原因,我得到了http://Example.com重定向到的所有请求http://www.Example.com.问题是,在本地工作时,请求localhost也会被重定向.

我尝试了这个重写规则中的建议到HTTPS,除非在localhost上回答没有运气.

这是我的实际重定向规则Web.Config(希望它可以帮助那些正在寻找重写规则到WWW的人):

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="redirect example.com to www.example.com">
          <match url="^(.*)" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
          </conditions>
          <action type="Redirect" url="http://www.example.com/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

asp.net web-config url-rewriting

2
推荐指数
1
解决办法
2954
查看次数

C# 第一次从 SSD 驱动器顺序读取文本文件非常慢

我在 Windows 会话期间第一次从 SSD 连续读取文本文件时遇到非常慢的情况。然后,第二次和连续读取速度快了 60 倍以上(在应用程序的第二次和后续运行中,这意味着不同的 Windows 进程)。我很确定这是系统和/或 SSD 缓存优化的正常结果,但我在这里提出一个问题,以便与社区仔细检查这个猜测,因为我没有通过谷歌搜索找到任何内容。

问:有什么办法可以让第一次阅读更快吗?


回答:

我更新了这个问题,因为感谢 @Alois Kraus 的回答,我们发现罪魁祸首是 Windows Defender 文件读取时的文件检查!

可以通过“开始”>“设置”>“更新和安全”>“Windows 安全”>“病毒和威胁防护”禁用此 Windows Defender 慢速检查。在“病毒和威胁防护设置”下,选择“管理设置”,然后在“排除项”下,选择“添加排除项”。我可以通过文件夹排除(它在文件夹下递归地工作)或文件类型来解决这个特殊问题,并将文件扩展名放在其上以禁用慢速检查。

现在剩下的问题是:

    1. 如何以编程方式检测 Windows Defender 正在减慢我们的代码,因此我们可以向用户发出警告并解释该怎么做
    1. 以编程方式禁用 Windows Defender 慢速检查(我确信这是不可能的,否则这将为病毒打开一扇门!)

Windows Defender 排除


细节:

我在两台不同的机器上重现了该问题,其中一台配备 SAMSUNG SSD MZVLB1T0HALR 1TB(最大读取速度 3200MB/秒),另一台配备 SAMSUNG SSD MZVL21T0HCLR 1TB(最大读取速度 7000MB/秒)。

通过经典File.ReadAllText(filePathStr)调用,我第一次得到 4.737 个文件的 33.555 秒(来自 dotTrace 的屏幕截图)。所有 4.7K 文本文件在磁盘上的累计重量为 28MB,这低于每秒 1MB 的读取速度。 在此输入图像描述

然后第二次和随后的时间快了 60 倍以上,540 毫秒而不是 33 秒,大约 60MB …

.net c# caching file-read

2
推荐指数
1
解决办法
678
查看次数

我如何从我的 VSIX 中知道构建之后将进行调试会话?

BuildEvents.OnBuildDone如果由于用户想要启动调试会话而触发了构建,我希望我的 VSIX 在我的处理程序中做一些不同的事情。

我试过了...

private void m_BuildEvents_OnBuildDone(vsBuildScope scope, vsBuildAction action) {
   if (m_DTE.Mode == vsIDEMode.vsIDEModeDebug) {
      //...
   }
}
Run Code Online (Sandbox Code Playgroud)

...但不幸的是在这一点m_DTE.Mode上还不等于vsIDEMode.vsIDEModeDebug.

我可以启动一个一两秒的计时器,然后检查是否(m_DTE.Mode == vsIDEMode.vsIDEModeDebug)但这不是一个干净可靠的解决方案。

我可以通过查询 VSIX API 以某种方式知道,无论是 inBuildEvents.OnBuildBegin还是BuildEvents.OnBuildDonehandler,成功的构建之后都会有一个 Debug 会话吗?

debugging build visual-studio vsix

1
推荐指数
1
解决办法
936
查看次数