Razor HTML Helpers giving intellisense errors in Nop Commerce Plugin

假如想象 提交于 2019-12-03 09:14:10
Luke

The only way I was able to get this working (using VS2013) was to convert the Class Library projects into MVC projects:

  1. In <PropertyGroup>, add < ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}< /ProjectTypeGuids>
  2. Add another import at the bottom: < Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

    Of course remove the extra space in the < tags>, it wasnt posting correct without them. There is a current bug issued on this with Microsoft here: https://connect.microsoft.com/VisualStudio/feedback/details/912301/intellisense-for-razor-in-class-libraries-not-working

The above answer about modifying the project from a Class Library to a MVC Project did not work for me as of VS2013 Update 4.

The following does work, however:

  1. For all configurations, set Build, Output, Output Path to bin\ and not ..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ as stated in nopCommerce documentation.

    In the .csproj file it should look like:

    <OutputPath>bin\</OutputPath>
    
  2. Set Build Events, Post-build command line: to copy to directory nopCommerce wants.

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

    In the .csproj file it should look like:

    <PropertyGroup>
        <PostBuildEvent>(robocopy $(ProjectDir)$(OutDir)  $(ProjectDir)..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ /MIR)  ^&amp; IF %25ERRORLEVEL%25 LEQ 1 exit 0</PostBuildEvent>
    </PropertyGroup>
    
  3. Setting Build Events, Run the post-build event: to "Always".

    In the .csproj file it should look like:

    <PropertyGroup>
        <RunPostBuildEvent>Always</RunPostBuildEvent>
    </PropertyGroup>
    
  4. Ensure that every single DLL file Reference in your plugin project is set to Copy Local. This is not necessary for the ProjectReference entries like Nop.Core, Nop.Data etc. Again, this is not what they tell you to do in the nopCommerce documentation, but it is required to make Intellisense work.

    In the .csproj file it should look like:

    <Reference Include="System.Web">
        <Private>True</Private>
    </Reference>
    
    (repeat for all DLL file references)...
    
  5. Close and reopen the solution, rebuild the plugin project and now open any razor .cshtml files. Intellisense will work as expected and there is no need for any future hacks to maintain it.

The project needs to know its in plugin development

1: Close your solution 2: open your *.csproj file with any editor 3: Add the following near the end of the project closing tag

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

4: reload the solution/project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!