【发布时间】:2016-09-04 14:54:27
【问题描述】:
- 创建了一个新的
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"
}
}
}
}
- 编译解决方案,我得到这个错误:
“日期时间”类型是在未引用的程序集中定义的。您必须添加对程序集 '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 项目,通过在
web.config中添加参考来解决它。好吧,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
- Xunit DNX 单元测试项目模板的 SideWaffle
- Visual C# 2015
更新
这似乎是由我使用此工具从 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 命令行中提供的示例中的步骤,它应该被视为一个日期时间。
只有当我在属性中添加一个点时,我才看到 DNXCORE50 不支持 DateTime。除了它是用于原生 DateTime 的,例如 'new DateTime()' (see screenshot here)。
关于如何解决这个问题的任何线索?
【问题讨论】:
-
你到底为什么要这样做?以 CoreCLR/CoreFx 为目标对于让您的代码有朝一日在 Linux 或 OSX 上运行很有用。那个 COM 组件永远不会。
-
@HansPassant:为什么不呢?我的意思是,一旦包装在 .NET 导入类型程序集中,作为 NuGet 包发布,然后使用适当的兼容性包进行引用,什么会阻止这个 COM 在其他操作系统上工作?另外,我仍然在我的学习曲线上。 =)
标签: c# .net visual-studio-2015 dnx