使用MVC和WebAPI </location>避免Resharper <location> web.config警告

时间:2013-03-27 09:28:43

标签: asp.net-mvc web-config asp.net-web-api resharper

ReSharper 7.1.1代码检查错误地将<location>文件中的web.config元素报告为冗余,如果它们涉及的源URL与源树中的文件夹不直接对应。如果您使用的是ASP.NET MVC或Web API,则URL路径与任何特定的物理文件夹不直接对应是正常的。

如果你运行解决方案范围的检查,你会得到两个警告,我已经能够禁用其中一个,但我无法弄清楚如何禁用第二个。

第一个是“冗余位置元素”警告。 ReSharper淡出整个位置部分。这是一个淡出的例子:

<location path="FederationMetadata">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

如果您通过ACS使用联合登录,并且希望为此提供元数据端点,则需要此配置。但是这个名字没有相应的路径。

(严格来说,这个特定与MVC或Web API无关。我给出了这个例子,因为它很常见。但是,我的项目还有几个<location>元素对应于通过MVC和Web处理的路径API路由配置,它们有同样的问题。根本原因似乎是相同的:ReSharper在项目中看不到与此位置相对应的任何内容,因此它错误地认为它是错误的。它折磨着MVC和Web API控制器,以及由模块之类的东西提供的任何路径。)

很容易摆脱这个第一个警告:您可以在检查严重性设置中将其关闭。

然后你得到第二个警告:“Location元素未使用:在FederationMetadata中找不到任何项目项目”(对于每个具有相应<location>元素的控制器都有相似的警告。)

此选项仅出现在检查整个解决方案时出现的“检查结果”面板中。查看源文件本身时,不会显示任何常用的检查小部件。奇怪的是,这个似乎没有被禁用的选项。

我知道您可以右键单击并选择“隐藏...”(虽然看起来这是一个“冗余位置”问题,我已经在设置中禁用了该问题),但就我而言可以告诉我,隐藏检查结果是我的机器本地的。我想配置团队共享的dotsettings,以便它不会在任何地方显示此警告。

我的目标是为所有用户提供干净的检查结果,而不会让每个用户隐藏结果。 Resharper虚假地报告了这个问题 - web.config很好,只是R#误解了它。有谁知道我怎么能让第二个警告消失? (或者,更好的是,有什么方法可以让R#知道这些“隐藏”位置确实存在吗?)

3 个答案:

答案 0 :(得分:9)

我刚添加了这个:

  <!-- ReSharper disable WebConfig.RedundantLocationTag -->
  <!-- ReSharper disable WebConfig.WebConfigPathWarning -->
  <location path="api">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- ReSharper restore WebConfig.RedundantLocationTag -->
  <!-- ReSharper restore WebConfig.WebConfigPathWarning -->

答案 1 :(得分:1)

您可以更改R#设置,使其不在您的计算机本地。

  1. 在VS中,点击RESHARPER菜单,然后点击Manage Options...
  2. 双击team-shared项目(应该是This computerpersonal之间的中间项目。)
  3. 通过更改此处的设置,它将在您的项目中创建一个[ProjectName].csproj.DotSettings文件。如果将此文件检入源代码管理,则将与在项目上开发的其他R#用户共享这些设置。 AFAIK,您可以更改的任何设置(例如告诉R#检查严重性应该与默认值不同),您应该能够添加到团队共享设置。

    至于你的web.config错误,我对R#有了更大的优势,因为当它启用时,我在web.config和app.config文件上丢失了intellisense。您可以告诉R#忽略以下错误,但我不确定它是您正在寻找的解决方案,因为它会忽略web.config文件中的所有R#问题。

    1. 双击以编辑team-shared设置(如上所述)后,点击左侧菜单中Settings下的Code Inspection项。
    2. 点击Edit Items to Skip button
    3. Files and folders to skip when analysing下,点击Add File...
    4. 导航到您的web.config文件并添加它。
    5. 这告诉R#在分析时忽略整个web.config文件。同样,不确定这是否是您想要的解决方案,但它可能会抑制您看到的错误建议。

      更新(回复评论)

      实际上,您可以从VS上下文菜单中更改检查选项。当Inspection Options对话框出现单选按钮(Do not show - Error)时,会出现Save To按钮。单击该按钮将设置保存到团队共享的DotSettings。

答案 2 :(得分:0)

似乎有两件事:

  1. 配置网络路径是处理这两个错误的最佳方法
  2. 显然您必须将设置从DotSettings.user文件中移出并手动转移到共享团队文件中
  3. 如果单击违规路径属性(将插入符号放在属性值中)然后等待R#弹出窗口出现,其菜单应提供创建“路径映射”或编辑现有路径的方法该网站的映射。您可以使用它来告诉R#路径对应的实际文件在哪里。或者,由于在这种情况下没有这样的文件,您可以将操作设置为忽略此路径。

    有了这个,所提到的警告都不会出现。

    不幸的是,路径映射对话框(如“过滤器问题”对话框)中只有一个“保存”按钮,没有“保存到”按钮,无法控制设置的去向。实际上,它们似乎最终出现在Web项目的<project>.DotSettings.user文件中。

    但是,如果您在文本编辑器中打开该文件,将设置从那里删除,并将其粘贴到您的团队共享解决方案设置中,那么结果只是文件。这似乎以适用于项目中每个人的方式摆脱了两个警告。

    (您应该可以使用类似的技巧来处理“过滤器问题”设置,但您需要查看其他位置。这些最终会出现在您的全局设置中,但您可以使用“管理选项”对话框将其导出,然后您可以打开导出的设置,并将它们复制到团队共享解决方案设置中。)