2017-01-19 41 views
2

我有荒謬的情況(不要怪我,它是第三方軟件),我需要有兩個引用(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)提供了一個外部別名的靈活性。我受到第三方軟件提供的環境的限制。我基本上需要一種方法來在方法體內進行區分。

  2. 我知道我可以完全避免使用動態關鍵字這個問題,但我正在尋找一個可能的強類型解決方案。

  3. 可能沒有解決方案,但我想在放棄問題之前耗盡所有資源。

+0

https://www.bing.com/search?q=c%23+same+type+two+assembly –

+0

@AlexeiLevenkov我知道什麼是命名空間,以及如何使用bing。你能提供更具體的嗎? –

+0

請[edit]發佈,以便明確哪些限制是可以重新打開的(並可能由某人回答)。附註:帖子應該*展示*你已經完成了哪些研究 - 只是你可以使用搜索引擎這一事實並不意味着SO帖子本身。 –

回答

2

Epicor ERP使用一種工具將數據庫中的表格放到數據集中,然後放到業務對象中。此業務對象在合同組合中進行了描述,但正如您在使用引用相同表的兩個業務對象時發現的那樣,您遇到了問題。這是SerialNumber表更常見的問題。

我從您的筆記中瞭解到您正在Epicor ERP應用程序中的Method Directive或Data Directive中提供方法體代碼。這是在客戶端輸入並存儲在數據庫中,但在服務器上的Deployment \ Server \ BPM \ Sources \ BO文件夾中生成代碼並編譯到Deployment \ Server \ Customization \ BO文件夾。

無法在BPM設計器的「執行自定義代碼」工作流項中爲引用的DLL指定別名。該修復程序在SCR 148549中有所要求。沒有項目文件供您編輯,即使每次啓用和禁用BPM都會重新生成。但是,如果您使用「Invoke External Method」工作流程項,則可以構建自己的dll並將其放入Deployment \ Server \ Customization \ Externals文件夾中。爲此,請執行以下操作:

  • 單擊操作>在您的BPM的方法指令維護中爲您的方法創建編程接口並複製代碼。
  • 在Visual Studio中創建一個新的類庫項目
  • 將複製的代碼粘貼到.cs文件
  • 添加組件 - 框架引用:
    • System.Data.Entity的
    • System.ServiceModel
    • 系統。交易
  • 添加文件引用
    • 斌\ Epicor.ServiceModel.dll
    • 組件\ Epicor.Ice.dll
    • 組件\ Epicor.System.dll
    • 組件\冰。 Data.Model.dll
    • 組件\ Erp.Data.910100.dll
  • 所並添加引用對BPM的BO即
    • 組件\ Erp.Contracts.BO.Quote.dll
  • 確保所有引用具有複製本地設置爲false。
  • Ice.ContextBoundBase<Erp.ErpContext>
  • 繼承添加一個構造函數上下文public MyQuote (Erp.ErpContext ctx) : base(ctx){ }

你不能完全複製和粘貼「執行自定義代碼」身體,你將無法訪問到TT行變量,這些都在ds中。

+0

我能夠關注一切,但我找不到Ice.ContextBoundBase <>。你知道它駐留在哪個組件嗎? –

+0

它應該在Server \ Assemblies \ Epicor.Ice.dll中,列表中的第二個。 –

相關問題