.net core NopCommerce插件内置于自定义插件中

.net core NopCommerce插件内置于自定义插件中,.net-core,nopcommerce,.net-core-2.2,.net Core,Nopcommerce,.net Core 2.2,我正在使用Nopcommerce 4.2并尝试创建一个自定义插件 在运行时,我得到一个错误: System.Exception: 'A plugin with 'DiscountRequirement.MustBeAssignedToCustomerRole' system name is already defined 当我转到Nop.Web/Plugins时,我可以看到所有已经构建的插件,包括我的。当我查看我的自定义插件时,我可以看到一个名为Plugins的文件夹,其中包含所有已构建的其他

我正在使用Nopcommerce 4.2并尝试创建一个自定义插件

在运行时,我得到一个错误:

System.Exception: 'A plugin with 'DiscountRequirement.MustBeAssignedToCustomerRole' system name is already defined
当我转到Nop.Web/Plugins时,我可以看到所有已经构建的插件,包括我的。当我查看我的自定义插件时,我可以看到一个名为Plugins的文件夹,其中包含所有已构建的其他插件

我查看了我的csproj,并将其与nop默认插件进行了比较,但无法找出为什么我的csproj会再次构建所有插件

要明确创建的结构是:

不,网络

  • 插件/

    --顾客折扣

    --ExchangeRate.ecbeexchange

    --…其他插件

    --我的.插件/

    ----应用程序数据

    ----区域

    ----插件/

    -----顾客折扣

    -----ExchangeRate.ecbeexchange

    -----…其他插件

我的项目文件

<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
      <OutputPath>..\..\Presentation\Nop.Web\Plugins\Widgets.MostViewedProducts</OutputPath>
    <OutDir>$(OutputPath)</OutDir>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
    <CopyLocalLockFileAssemblies>false</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Domain\**" />
    <Content Remove="Domain\**" />
    <EmbeddedResource Remove="Domain\**" />
    <None Remove="Domain\**" />
  </ItemGroup>

  <ItemGroup>
    <None Remove="logo.jpg" />
    <None Remove="plugin.json" />
  </ItemGroup>

  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="logo.jpg">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="plugin.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <Content Update="Areas\Admin\Views\BuilderProductAttribute\Create.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProductAttribute\Edit.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProductAttribute\List.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProductAttribute\_CreateOrUpdate.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\Create.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\Edit.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\List.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\ProductAttributeCatalogCreatePopup.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\ProductAttributeMappingCreate.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\ProductAttributeMappingEdit.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdate.Attributes.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdate.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdate.Info.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdate.SEO.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdateProductAttributeMapping.Catalog.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdateProductAttributeMapping.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\BuilderProduct\_CreateOrUpdateProductAttributeMapping.Info.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\ProductBuilder\Configure.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Areas\Admin\Views\_ViewImports.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\BuilderProduct\AttributeMappingProduct.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\BuilderProduct\Details.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\BuilderProduct\ProductDetails.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\BuilderProduct\_CatalogSelectors.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\BuilderProduct\_ProductBox.ProductBuilder.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="Views\_ViewImports.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Areas\Admin\Controllers\" />
    <Folder Include="Areas\Admin\Extensions\" />
    <Folder Include="Areas\Admin\Factories\" />
    <Folder Include="Areas\Admin\Infrastructure\" />
    <Folder Include="Areas\Admin\Models\" />
    <Folder Include="Areas\Admin\Views\" />
    <Folder Include="Controllers\" />
    <Folder Include="Extensions\" />
    <Folder Include="Factories\" />
    <Folder Include="Models\" />
  </ItemGroup>


  <ItemGroup>
    <ProjectReference Include="..\..\Presentation\Nop.Web.Framework\Nop.Web.Framework.csproj" />
    <ProjectReference Include="..\..\Presentation\Nop.Web\Nop.Web.csproj" />
    <ClearPluginAssemblies Include="$(MSBuildProjectDirectory)\..\..\Build\ClearPluginAssemblies.proj" />
  </ItemGroup>


  <ItemGroup>
    <None Update="Views\Shared\Components\Default.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Views\_ViewImports.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

  <!-- This target execute after "Build" target -->
  <Target Name="NopTarget" AfterTargets="Build">
    <!-- Delete unnecessary libraries from plugins path -->
    <MSBuild Projects="@(ClearPluginAssemblies)" Properties="PluginPath=$(MSBuildProjectDirectory)\$(OutDir)" Targets="NopClear" />
  </Target>
</Project>

请清理您的垃圾箱并删除此“Nop.Web->Plugins”文件夹下的所有插件一次。这对我有用。
谢谢

有几个地方出现了错误。未经检查无法给出答案,如plugin.json、dependencyregister.cs、plugin.cs等

但当你熟悉它时,你可以找到自己的加速方式 你的发展

提示:如果您的插件仍然存在任何问题,这是最简单的方法。

  • 只需复制一个小的原始插件,比如'Nop.plugin.Payments.Qualpay,Square,SendinBlue',然后重命名edit.proj文件集输出文件夹
  • 删除除“DependencyRegister.cs、RouteProvider.cs、plugin.json、StartUpPlugin.cs”之外的所有不必要的类、文件和文件夹
  • 更改其余文件的名称空间并删除不必要的代码
  • 在plugin.json中的“SupportedVersions”:[“4.20”]是一个必须值
  • 构建并清除所有错误
  • 它应该出现在“配置>本地配置”上
  • 提示:这是当我收到参考错误时我的项目构建最佳实践

  • 清洗溶液
  • 转到~/API/Presentation/Nop.Web/Plugins文件夹并删除所有构建文件夹
  • 右键单击“库”文件夹并构建它
  • 右键单击“演示文稿”文件夹并构建它
  • 右键单击“插件”文件夹并构建它
  • 祝你好运 您可以参考以下模板

    plugin.json(“SupportedVersions”):[“4.20”]是一个必须值,否则插件服务将不会选择您的插件

    {
      "Group": "Plugin group name",
      "FriendlyName": "Elastic Search",
      "SystemName": "Custom.Plugin.ElasticSearch",
      "Version": "1.56",
      "SupportedVersions": [ "4.20" ],
      "Author": "Isanka Thalagala",
      "DisplayOrder": 27,
      "FileName": "Custom.Plugin.ElasticSearch.dll",
      "Description": "This plugin provice ilastic search"
    }
    
    DependencyRegistrar.cs类

    public class DependencyRegistrar : IDependencyRegistrar
    {
       /// <summary>
       /// Register services and interfaces
       /// </summary>
       /// <param name="builder">Container builder</param>
       /// <param name="typeFinder">Type finder</param>
       /// <param name="config">Config</param>
       public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
       {
          //register service manager
          builder.RegisterType<SearchFilterService>().As<ISearchFilterService>().InstancePerLifetimeScope();
          builder.RegisterType<ElasticSearchService>().As<IElasticSearchService>().InstancePerLifetimeScope();          
       }
    
       /// <summary>
       /// Gets order of this dependency registrar implementation
       /// </summary>
       public int Order => 1;
    }
    
    公共类依赖注册器:idependencyRegister
    {
    /// 
    ///注册服务和接口
    /// 
    ///集装箱制造商
    ///类型查找器
    ///配置
    公共虚拟无效寄存器(ContainerBuilder生成器、ITypeFinder typeFinder、NopConfig配置)
    {
    //注册服务经理
    builder.RegisterType();
    builder.RegisterType();
    }
    /// 
    ///获取此依赖项注册器实现的顺序
    /// 
    公共秩序=>1;
    }
    
    ElasticSearchPlugin.cs

    public class ElasticSearchPlugin : BasePlugin
        {
            #region Ctor
            public ElasticSearchPlugin()
            {
            }
    
            #endregion
    
            #region Methods
            /// <summary>
            /// Install the plugin
            /// </summary>
            public override void Install()
            {
                base.Install();
            }
    
            /// <summary>
            /// Uninstall the plugin
            /// </summary>
            public override void Uninstall()
            {
                base.Uninstall();
            }
    
            #endregion
    
            /// <summary>
            /// Gets a value indicating whether to hide this plugin on the widget list page in the admin area
            /// </summary>
            public bool HideInWidgetList => true;
        }
    
    公共类ElasticSearchPlugin:BasePlugin
    {
    #区域导体
    公共ElasticSearchPlugin()
    {
    }
    #端区
    #区域方法
    /// 
    ///安装插件
    /// 
    公共覆盖无效安装()
    {
    底座。安装();
    }
    /// 
    ///卸载插件
    /// 
    公共覆盖无效卸载()
    {
    base.Uninstall();
    }
    #端区
    /// 
    ///获取一个值,该值指示是否在管理区域的小部件列表页面上隐藏此插件
    /// 
    public bool HideInWidgetList=>true;
    }
    
    问题可能是引用,因为当您将引用DiscountRequest.MustbeaAssignedTocustomerRole添加到另一个插件时,需要将属性Copylocal=false放入。

    确保
    plugin.json
    中的
    系统名
    (位于插件文件夹中)是唯一的。你能显示你的plugins.json文件吗?@H.Herzl我已经按要求添加了内容。你需要显示你的plugins.json,这个文件在App_数据中directory@H.Herzl我已经更新了帖子。我从没想过往里面看,但我什么也没看到
    public class ElasticSearchPlugin : BasePlugin
        {
            #region Ctor
            public ElasticSearchPlugin()
            {
            }
    
            #endregion
    
            #region Methods
            /// <summary>
            /// Install the plugin
            /// </summary>
            public override void Install()
            {
                base.Install();
            }
    
            /// <summary>
            /// Uninstall the plugin
            /// </summary>
            public override void Uninstall()
            {
                base.Uninstall();
            }
    
            #endregion
    
            /// <summary>
            /// Gets a value indicating whether to hide this plugin on the widget list page in the admin area
            /// </summary>
            public bool HideInWidgetList => true;
        }