类型 'DateTime' 是在未引用的程序集中定义的?
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"
}
}
}
}
- 编译解决方案,我得到这个错误:
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
中添加引用来解决它。嗯,Class Library (Package)
没有 web.config
.
The type ‘System.Object’ is defined in an assembly that is not reference (MVC + PCL issue)
CS0012: The type 'System.Web.Routing.RouteValueDictionary' is defined in an assembly that is not referenced
我也下载安装了这个补丁:
Microsoft .NET Framework 4.5.2 Developer Pack
,没有任何改变。
还有一个我几乎无法理解所讨论的内容,因为他们在谈论每个版本的框架或类似框架的外观。
The type 'System.Object' is defined in an assembly that is not referenced
虽然我找不到对实际问题有用的解决方案,但它看起来像是一个常见问题。
目前正在使用
- Visual Studio 社区 2015 - 版本 14.0.25123.00 更新 2
- .NET 框架 4.6.01055
- ASP.NET 已安装 MVC 6
- Xunit DNX 单元测试项目模板的 SideWaffle
- 可视化 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
命令行上提供的示例中的步骤,它应该被视为 DateTime。
只有当我在 属性 中添加一个点时,我才看到 DNXCORE50 不支持 DateTime。除了它用于本机 DateTime,例如 'new DateTime()' (see screenshot here
).
关于如何解决这个问题的任何线索?
根据 GitHub 上报告的问题:Accessing mscorelib in DNX Core 5.0 #989
,核心 CLR 似乎不能很好地支持引用的 COM 类型mscorlib.dll.
此外,还有一个解决此问题的软件包:
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"
}
}
}
要了解有关此软件包的更多详细信息,并了解有关该问题的更多信息,我强烈建议您访问提供的链接,因为它们涵盖了更深入的信息。
最后,问题解决了! =)
- 创建了一个新的
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"
}
}
}
}
- 编译解决方案,我得到这个错误:
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
中添加引用来解决它。嗯,Class Library (Package)
没有web.config
.The type ‘System.Object’ is defined in an assembly that is not reference (MVC + PCL issue)
CS0012: The type 'System.Web.Routing.RouteValueDictionary' is defined in an assembly that is not referenced
我也下载安装了这个补丁:
Microsoft .NET Framework 4.5.2 Developer Pack
,没有任何改变。还有一个我几乎无法理解所讨论的内容,因为他们在谈论每个版本的框架或类似框架的外观。
The type 'System.Object' is defined in an assembly that is not referenced
虽然我找不到对实际问题有用的解决方案,但它看起来像是一个常见问题。
目前正在使用
- Visual Studio 社区 2015 - 版本 14.0.25123.00 更新 2
- .NET 框架 4.6.01055
- ASP.NET 已安装 MVC 6
- Xunit DNX 单元测试项目模板的 SideWaffle
- 可视化 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
命令行上提供的示例中的步骤,它应该被视为 DateTime。
只有当我在 属性 中添加一个点时,我才看到 DNXCORE50 不支持 DateTime。除了它用于本机 DateTime,例如 'new DateTime()' (see screenshot here
).
关于如何解决这个问题的任何线索?
根据 GitHub 上报告的问题:Accessing mscorelib in DNX Core 5.0 #989
,核心 CLR 似乎不能很好地支持引用的 COM 类型mscorlib.dll.
此外,还有一个解决此问题的软件包:
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"
}
}
}
要了解有关此软件包的更多详细信息,并了解有关该问题的更多信息,我强烈建议您访问提供的链接,因为它们涵盖了更深入的信息。
最后,问题解决了! =)