[英]The type 'DateTime' is defined in an assembly that is not referenced?
Class Library (Package)
項目 project.json
更改為這樣(添加了項目依賴項): project.json
{
"version": "1.0.0-*",
"description": "WMI.ECM.PCMS.Services.Acomba Class Library",
"authors": [ "WILL" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"dependencies": {
"Acomba.SDK": "2.0.0",
"WMI.ECM.Inventory.Models": "",
"WMI.ECM.Inventory.Services": "",
"WMI.ECM.Inventory.Services.Contracts": ""
},
"frameworks": {
"dnx451": { },
"dnxcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading": "4.0.11-beta-23516"
}
}
}
}
“DateTime”類型在未引用的程序集中定義。 您必須添加對程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PunlicKeyToken = b77a5c561934e089'的引用。
mscorlib.dll
實際上是在有問題的項目中引用的: Referenced assemblies
。 結果,我做了一些最終無能為力的搜索。
我試圖在我的project.json中添加依賴項到dnx451 {},如下所示:
"dnx451": {
"dependencies": {
"Microsoft.CSharp": "",
"System.Runtime": ""
...
}
}
因為我記得在某處讀過這樣的解決方案,但它沒有用。
大多數答案是針對Web項目的舊版本,通過在web.config
添加引用來解決它。 好吧, Class Library (Package)
沒有web.config
。
我還下載並安裝了這個補丁: Microsoft .NET Framework 4.5.2 Developer Pack
,它什么都沒改變。
而另一個我幾乎無法理解所討論的是什么,因為他們正在討論框架的每個版本或類似的東西的外觀。
它看起來像一個常見問題,雖然我找不到任何有用的解決方案來解決實際問題。
目前使用
UPDATE
它似乎是由我從VS CMD行使用此工具導入的COM庫引起的: Tlbimp.exe (Type Library Importer)
。
簡而言之,AcoSDK.dll是一個COM庫,我使用上述工具導入它來創建一個.NET程序集,所有的COM類型都解析為.NET類型。
然后,我使用NuGet.exe
創建一個包,我通過我的私人訂閱源發布。
然后,我在我的project.json
中將我的項目中的包引用為"Acomba.SDK": "2.0.0"
。
每當我使用此包中的DateTime屬性時,都會發生生成錯誤。 例如,這會導致錯誤發生:
public DateTime CreatedAt { get { return p.PrTimeModified; } }
而這不是:
public DateTime CreatedAt { get { return new DateTime(); } }
.NET DateTime的COM類型是Date。 但是,它應該被視為遵循tlbimp.exe
命令行中提供的示例中的步驟的DateTime。
只有當我在屬性中添加一個點時,我才看到DNXCORE50不支持DateTime。 除了它是原生DateTime,例如'new DateTime()'( see screenshot here
)。
關於如何解決這個問題的任何線索?
根據GitHub上報告的這個問題: Accessing mscorelib in DNX Core 5.0 #989
,似乎Core CLR不能很好地支持引用mscorlib.dll的COM類型。
此外,還有一個可用於解決此問題的程序包: Microsoft.NETCore.Portable.Compatibility
。
簡而言之,它所做的只是將引用mscorlib.dll的類型(如COM對象)重新映射到較新版本的System.Runtime和其他庫,而這些庫又引用了相應的DLL以獲得正確的版本。
所以解決方案是在project.json中添加這個包,如下所示:
project.json
"frameworks": {
"dnx451": { },
"dnxcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading" : "4.0.11-beta-23516"
}
}
}
有關此軟件包的更多詳細信息,以及有關該問題的更多信息,我強烈建議您按照提供的鏈接進行操作,因為它們涵蓋了更深入的信息。
最后,它解決了這個問題! =)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.