Visual Studio 从nopCommerce中的主题引用插件在4.60中不再工作

4ioopgfo  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(141)

我们在nopCommerce中内置了这个大型解决方案,我们有2个插件和一个自定义主题。
我目前正在从4.3升级到4.6,这意味着在服务引用(在插件中)中将所有内容更改为异步,沿着其他一些制动更改。
这两个插件现在都升级了,但我在主题中遇到了问题,我不再可以从插件中引用类。
下面是_CheckoutAttributes.cshtml如何布局的示例。它位于Nop.Web/Themes/ThemeName/Views/Shared中。
我已经将一些命名更改为“ProjectName”以保持隐私。

@using System.Text
@using Nop.Core.Domain.Catalog
@using Nop.Core.Domain.Media
@using Nop.Services.Media
@using Nop.Services.Orders
@using Nop.Core
@using Nop.Plugin.Misc.ProjectName.Services
@inject IDownloadService downloadService
@inject CatalogSettings catalogSettings
@inject ICheckoutAttributeService checkoutAttributeService
@inject IStoreContext _storeContext
@inject IProjectNameCheckoutAttributeService projectNameCheckoutAttributeService
@inject IWebHelper _webHelper

@{
    var checkoutAttributes = projectNameCheckoutAttributeService.GetCheckoutAttributes();
}

<form method="post" enctype="multipart/form-data" id="checkout-attributes-form">

etc...

我得到的错误是类型或命名空间名称“Plugin”在命名空间“Nop”中不存在(是否缺少程序集引用?)
这曾经在nopCommerce 4. 3中工作,但无论我现在尝试什么(清理,重建等),它都不会构建。
在4.3中,Intellisense实际上给出了相同的错误,但项目/解决方案的编译仍然成功。

如何解决这个问题?

我尝试过重建、清理、重新启动Visual Studio,并关闭cshtml文件。
我也试过参考其他标准插件来看看这个问题是否只与我的插件有关,但也失败了。
看起来nopCommerce 4.6或者dot.netcore 7在编译razor文件方面更加严格,或者可能与Visual Studio有关?
我研究了是否可以选择在加载时只编译剃刀文件,但似乎找不到在编译时关闭构建它们的方法。

gk7wooem

gk7wooem1#

服务“IProjectNameCheckoutAttributeService projectNameCheckoutAttributeService”是插件“Nop.Plugin.Misc.ProjectName.Services”的服务类,如果我理解正确的话。在我看来,由于该插件没有作为依赖项添加到Nop.Web,Nop.Web内的文件无法从您的插件访问文件。
现在如果你添加了它,如果Nop.Web在你的插件中被引用,它很可能会创建一个循环依赖。
我能想到的一个解决办法是在插件中覆盖这个视图,然后在那里编写代码。
如果原始文件路径为:Nop.Web/Themes/ThemeName/Views/Shared/ _CheckoutAttributes.cshtml,在插件内部按照相同的文件夹结构覆盖它:YourPlugin/Themes/ThemeName/Views/Shared/_CheckoutAttributes.cshtml
要做到这一点,你需要在你的插件中添加ViewLocationExpander和其他必要的东西。希望这能有所帮助。

相关问题