我用以下projects.json创建了一个可移植类库
{
"supports": {},
"dependencies": {
"Microsoft.CSharp": "4.0.1",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0",
"System.Runtime.Serialization.Primitives": "4.1.1",
"System.Runtime": "4.1.0"
},
"frameworks": {
"net451": {},
"netstandard1.5": {}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当从ASP.NET应用程序(而不是ASP.NET Core)引用它时,我得到以下运行时异常:
Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
如果我从控制台应用程序引用它,它运行没有问题.
有任何想法吗?
编辑
在这里找到解决方案:https://stackoverflow.com/a/37639003/691045
如更新中所述,该问题的一个解决方案是将PCL打包为nuget包.然而,这与使用PCL以.Net标准为目标时试图做的事情相反.此外,封装解决方案变得很麻烦.
对我来说,当将csproj跨越到xproj边界时,它似乎是Net Core Tools Preview的一个错误.要证明这一点,如果通过nuget安装包:
Install-Package System.Runtime
Run Code Online (Sandbox Code Playgroud)
该System.Runtime看起来正确project.json的"System.Runtime": "4.1.0".查看引用,可以看到该版本列为System.Runtime (4.0.20).实际的bin也绝对引用了实际的dll.
只需将.Net 4.6.2 dll从nuget缓存复制到bin中即可解决问题.这允许直接引用而无需打包PCL.
希望当我们达到Net Standard 2.0并且工具成熟一点时,这种类型的东西将成为过去.
更新:如果您使用最新的.Net Core版本(1.1)和二进制文件,这是固定的.工具预览仍在1.0.1上,因此您必须确保安装1.1的二进制文件.
| 归档时间: |
|
| 查看次数: |
15961 次 |
| 最近记录: |