- 創建一個新的
Class Library (Package)
項目 - 改變了
project.json
看起來像這樣(添加項目依賴):
project.json類型'DateTime'是在未引用的程序集中定義的?
{
"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"
}
}
}
}
- 編譯解決方案,並我得到這個錯誤:
The type 'DateTime' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PunlicKeyToken=b77a5c561934e089'.
- 然而,我沒有與我的其他項目,這個問題也針對DNX451和DNXCORE50。我還應該提及,
mscorlib.dll
實際上是通過此屏幕截圖在相關項目中引用的:Referenced assemblies
。
因此,我做了一些最終無能爲力的搜索。
我試圖依賴於我的project.json添加到dnx451 {}像這樣:
"dnx451": {
"dependencies": {
"Microsoft.CSharp": "",
"System.Runtime": ""
...
}
}
因爲我記得讀過這樣的解決方案的地方,並沒有奏效。
大部分的答案是舊的版本,其中加入的
web.config
參考解決它的web項目。那麼,Class Library (Package)
沒有web.config
。我也下載並安裝此補丁:
Microsoft .NET Framework 4.5.2 Developer Pack
,它什麼也沒有改變。另一個我幾乎不能理解什麼被討論,因爲他們正在討論框架的每個版本或類似的東西的外觀。
它看起來像一個共同的問題,雖然我無法找到任何有用的解決實際問題。
目前使用
- 的Visual Studio 2015年社區 - 版本14.0.25123.00更新2
- 的.NET Framework 4.6。01055
- ASP.NET MVC 6只裝
- SideWaffle的xUnit的DNX單元測試項目模板
- 的Visual C#2015
UPDATE
它似乎是由COM庫而導致其我使用VS CMD行的這個工具導入: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日期時間的COM類型是日期。但是,應按照tlbimp.exe
命令行上提供的示例中的步驟將它視爲DateTime。
只有當我給該屬性添加一個點時,我發現DNXCORE50中不支持DateTime。除了它是用於本地DateTime,例如'new DateTime()'(see screenshot here
)。
任何線索如何解決這個問題?
爲什麼在地球上你這樣做?定位CoreCLR/CoreFx有助於您的代碼在某天在Linux或OSX上運行。該COM組件永遠不會。 –
@HansPassant:爲什麼不呢?我的意思是,一旦包裝在.NET導入類型程序集中,作爲NuGet程序包發佈,然後使用適當的兼容性程序包進行引用,什麼會阻止此COM在其他操作系統上運行?另外,我仍然在這裏學習曲線。 =) –