gpt4 book ai didi

c# - 如何在另一个引用的程序集中使用与另一个类型同名的类型?

转载 作者:行者123 更新时间:2023-11-30 23:17:02 26 4
gpt4 key购买 nike

我有一个荒谬的情况(不要怪我,它是第三方软件)我需要有两个引用(Erp.Contracts.BO.Quote 和 Erp.Contracts.BO.SalesOrder),但是 Erp 类型.Tablesets.QuoteQtyRow 在两个程序集中都有定义!

如何在代码中使用它们?

void Absurdity()
{
Erp.Tablesets.QuoteQtyRow qqr_Quote = null; //<-- my intention is to use the one from the quote assembly here.
Erp.Tablesets.QuoteQtyRow qqr_SO = null; //<-- my intention is to use the one from the sales order assembly here.
}

编译器抛出一个错误。即:“类型‘Erp.Tablesets.QuoteQtyRow’存在于两个程序集中。”

编辑:限制:

  1. 我没有使用此答案 Class with same name in two assemblies (intentionally) 中提供的外部别名的灵 active .我受限于第三方软件提供的环境。我本质上需要一种方法来在方法体内进行区分。

  2. 我知道我可以通过使用 dynamic 关键字完全避免这个问题,但我正在寻找一个可能的强类型解决方案。

  3. 可能没有解决方案,但我想在放弃这个问题之前用尽我所有的资源。

最佳答案

Epicor ERP 使用一种工具将数据库中的表格组合成数据集,然后再放入业务对象中。该业务对象在契约(Contract)程序集中进行了描述,但是正如您所发现的,当您使用引用同一个表的两个业务对象时,您会遇到问题。这是 SerialNumber 表更常见的问题。

我从您的注释中了解到,您在 Epicor ERP 应用程序中的方法指令或数据指令中提供了方法主体代码。这是在客户端输入并存储在数据库中,但在服务器上的 Deployment\Server\BPM\Sources\BO 文件夹中生成代码,并编译到 Deployment\Server\Customization\BO 文件夹。

无法在 BPM 设计器的“执行自定义代码”工作流项中为引用的 DLL 指定别名。在 SCR 148549 中请求修复。没有供您编辑的项目文件,即使每次启用和禁用 BPM,它也会重新生成。

但是,如果您使用“调用外部方法”工作流程项,那么您可以构建自己的 dll 并将其放在 Deployment\Server\Customization\Externals 文件夹中。为此:

  • 在 BPM 的方法指令维护中单击操作 > 为您的方法创建编程接口(interface)并复制代码。
  • 在 Visual Studio 中创建一个新的类库项目
  • 将复制的代码粘贴到.cs文件中
  • 添加程序集 - 框架引用:
    • 系统.数据.实体
    • 系统服务模型
    • 系统.交易
  • 将文件引用添加到
    • Bin\Epicor.ServiceModel.dll
    • 程序集\Epicor.Ice.dll
    • 程序集\Epicor.System.dll
    • 程序集\Ice.Data.Model.dll
    • 程序集\Erp.Data.910100.dll
  • 并为 BPM 的 BO 添加引用,即
    • 程序集\Erp.Contracts.BO.Quote.dll
  • 确保所有引用都将 Copy Local 设置为 false。
  • 继承自 Ice.ContextBoundBase<Erp.ErpContext>
  • 添加一个接受上下文的构造函数public MyQuote (Erp.ErpContext ctx) : base(ctx){ }

您不能完全复制并粘贴“执行自定义代码”正文,因为您无权访问 tt 行变量,这些都在 ds 中。

关于c# - 如何在另一个引用的程序集中使用与另一个类型同名的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com