【问题标题】:Razor HTML Helpers giving intellisense errors in Nop Commerce PluginRazor HTML Helper 在 Nopcommerce 插件中提供智能感知错误
【发布时间】:2014-08-02 06:24:57
【问题描述】:

我正在为 Nop Commerce 编写一个插件,而我的 HTML 助手给了我智能感知错误。我得到了下划线的红线和错误:

无法使用功能“扩展方法”,因为它不是 ISO-2 C# 语言规范的一部分

无法使用功能“lambda 表达式”,因为它不是 ISO-2 C# 语言规范的一部分

这是我的代码:

@{
    Layout = "";
}
@model Nop.Plugin.Widgets.HelloWorld.Models.ConfigurationModel
@using Nop.Web.Framework;
@Html.Action("StoreScopeConfiguration", "Setting", new { area = "Admin" })
@using (Html.BeginForm())
{
    <fieldset>
        <legend><strong>Hello World Configuration</strong></legend>
        <table class="adminContent">
            <tr>
                <td class="adminTitle">
                @Html.OverrideStoreCheckboxFor(model => model.Greeting_OverrideForStore, model => model.Greeting, Model.ActiveStoreScopeConfiguration)
                    @Html.NopLabelFor(model => model.Greeting):
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.Greeting)
                    @Html.ValidationMessageFor(model => model.Greeting)
                </td>
            </tr>
            <tr>
                <td class="adminTitle">
                    @Html.OverrideStoreCheckboxFor(model => model.Name_OverrideForStore, model => model.Name, Model.ActiveStoreScopeConfiguration)
                    @Html.NopLabelFor(model => model.Name):
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.Name)
                    @Html.ValidationMessageFor(model => model.Name)
                </td>
            </tr>
        </table>
    </fieldset>
    <br />
    <table class="adminContent">
        <tr>
            <td colspan="2">
                <input type="submit" name="save" class="k-button" value="@T("Admin.Common.Save")" />
            </td>
        </tr>
    </table>
}

我的屏幕是这样的:

我已经寻找了几个小时的答案,但还没有找到一个真正有效的答案。该项目是一个代码库,与解决方案的其余部分一样位于 ASP.NET 4.5.1 上。我构建时没有错误。我是否缺少参考或使用语句?我不确定发生了什么。

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor nopcommerce


    【解决方案1】:

    我能够使这项工作(使用 VS2013)的唯一方法是将类库项目转换为 MVC 项目:

    1. &lt;PropertyGroup&gt; 中添加&lt; ProjectTypeGuids&gt;{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}&lt; /ProjectTypeGuids&gt;
    2. 在底部添加另一个导入:&lt; Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /&gt;

      当然要删除 中的多余空间,没有它们就不能正确发布。微软在此发布了一个当前错误:https://connect.microsoft.com/VisualStudio/feedback/details/912301/intellisense-for-razor-in-class-libraries-not-working

    【讨论】:

    【解决方案2】:

    上述关于将项目从类库修改为 MVC 项目的答案在 VS2013 更新 4 中对我不起作用。

    以下方法确实有效:

    1. 对于所有配置,将 Build、Output、Output Path 设置为 bin\not ..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\,如 nopCommerce 文档中所述。

      在 .csproj 文件中应该如下所示:

      <OutputPath>bin\</OutputPath>
      
    2. 设置构建事件,构建后命令行:复制到nopCommerce想要的目录。

      (robocopy $(ProjectDir)$(OutDir) $(ProjectDir)..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ /MIR) ^& IF %ERRORLEVEL% LEQ 1 exit 0
      

      在 .csproj 文件中应该如下所示:

      <PropertyGroup>
          <PostBuildEvent>(robocopy $(ProjectDir)$(OutDir)  $(ProjectDir)..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ /MIR)  ^&amp; IF %25ERRORLEVEL%25 LEQ 1 exit 0</PostBuildEvent>
      </PropertyGroup>
      
    3. 设置构建事件,运行构建后事件:为“始终”。

      在 .csproj 文件中应该如下所示:

      <PropertyGroup>
          <RunPostBuildEvent>Always</RunPostBuildEvent>
      </PropertyGroup>
      
    4. 确保插件项目中的每个 DLL 文件引用都设置为 复制本地。对于 Nop.Core、Nop.Data 等 ProjectReference 条目来说,这不是必需的。同样,这不是他们在 nopCommerce 文档中告诉你的,但它是使 Intellisense 工作所必需的。

      在 .csproj 文件中应该如下所示:

      <Reference Include="System.Web">
          <Private>True</Private>
      </Reference>
      
      (repeat for all DLL file references)...
      
    5. 关闭并重新打开解决方案,重新构建插件项目,然后打开所有 razor .cshtml 文件。 Intellisense 将按预期工作,并且不需要任何未来的黑客来维护它。

    【讨论】:

    • 工作正常,不仅适用于 nopcommerce。这个解决方案也很有意义。最大的缺点是它在目标中创建的 dll 混乱。
    • 非常感谢您的回答!这一直困扰着我很长时间,而您的解决方案成功了。我真的希望我能更多地支持这个答案。
    【解决方案3】:

    项目在插件开发中需要知道它

    1:关闭您的解决方案 2:使用任何编辑器打开您的 *.csproj 文件 3:在项目结束标记附近添加以下内容

    <Import Project="$(SolutionDir)\FixRazorIntellisense.targets" Condition="'$(Configuration)' == 'PluginDev'" />
    

    4:重新加载解决方案/项目

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2022-01-09
      • 2022-07-04
      • 1970-01-01
      相关资源
      最近更新 更多