NodaTime是否与NetCoreApp 1.0兼容?

3

我正在开发一个跨平台的dotnet core应用程序,想在我的项目中使用Noda作为一个实用工具。但是,即使我已经将nodatime定义为我的项目依赖项之一,仍然会遇到以下错误:

 System.IO.FileNotFoundException: Could not load file or assembly 'NodaTimestrong text, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4226afe0d9b296d1'. The system cannot find the file specified.
      File name: 'NodaTime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4226afe0d9b296d1'
         at project.ef.CalendarHelper.ValidateTimeZone(String timezoneTypeName)
         at project.ef.CalendarHelper.

以下是项目配置文件:
API 项目:
{
  "buildOptions": {
    "preserveCompilationContext": true,
    "emitEntryPoint": true,
    "warningsAsErrors": true,
    "debugType": "portable",
  "copyToOutput": {
      "include": [
        "config.json",
        "Certificate.pfx"
      ]
    }
  },
  "dependencies": {
    "AspNet.Security.OAuth.Introspection": "1.0.0-alpha2-final",
    "AspNet.Security.OAuth.Validation": "1.0.0-alpha2-final",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Mvc.Formatters.Json": "1.0.0",
    "Microsoft.AspNetCore.Mvc.Cors": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.EntityFrameworkCore.Design": {
        "type": "build",
        "version": "1.0.0-preview2-final"
    },
    "Microsoft.NETCore.App": "1.0.0",
    "project.ef": "1.0.0-*"
  },
  "tools": {
      "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [ "portable-dnxcore50+net45+win8+wp8+wpa81" ]
    }
  },
  "publishOptions": {
    "include": [
      "config.json"
    ]
  },
  "runtimes": {
      "win10-x64": {},
      "osx.10.11-x64": {},
      "ubuntu.14.04-x64": {}
  }
}

EF PROJECT

{
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.1",
    "Npgsql.EntityFrameworkCore.PostgreSQL.Design": "1.0.1",    
    "project.Internal.ERP": "1.1.0-*",
    "project.models": "1.0.0-*",
    "NodaTime": "2.0.0-alpha-*"
  },
  "frameworks": {
    "netstandard1.6": {
      "imports": [
        "dnxcore50",
        "portable-net451+win8"
      ]
    }
  }
}

你的依赖关系是什么样子的?2.0.0-alpha20160729应该可以与netcoreapp1.0兼容,不需要任何导入。 - Jon Skeet
看起来是这样的:https://www.nuget.org/packages/NodaTime/2.0.0-alpha20160729 - 目标为 netstandard1.1,所以你应该没问题。你能展示一下你的 project.json 吗?我查看了包内容,它并不包含 NodaTimestrong 组件,只有 NodaTime。 - Pawel
我修改了我的问题,以包含更多细节。我有两个project.json文件 - 一个用于API,另一个用于我的数据库逻辑。是否有任何示例dotnet core项目可以供我参考?@JonSkeet我在您下面的示例中看到您正在引用1.0.1,而我正在引用1.0.0,也许有什么问题。我正在使用NodaTime来复制此问题的解决方案https://dev59.com/W2Qm5IYBdhLWcg3wxBVg - chris
1
@chris:我不知道1.0.0与1.0.1之间的差异是否重要,但我会指定Noda Time的确切版本,而不是使用*,并且至少尝试在两个project.json文件中添加依赖项,作为起点。(当你排除了这个问题的原因时,你可以从API项目中删除依赖项。) - Jon Skeet
1个回答

5

Noda Time 1.x只支持PCL。你也许能够在netcoreapp1.0上使用它,但我不能保证。

但是Noda Time 2.0支持netstandard1.1,所以应该没问题。目前只有alpha版本可用,但它可以正常工作:

project.json内容:

{
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "NodaTime": "2.0.0-alpha20160729"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.1"
        }
      }
    }
  }
}

Program.cs 的内容:

using System;
using NodaTime;

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine(SystemClock.Instance.GetCurrentInstant());
    }
}

没有问题地运行。


原来明确定义nodatime依赖项的版本号解决了我的问题。有时候最简单的解决方案就是最好的哈哈 - 谢谢! - chris
@chris:您可能需要查看先前选取的版本-如果您查看 project.lock.json,则可以查看精确的解析依赖项。 - Jon Skeet
哦,哇——我查看了我的NuGet缓存,之前使用的是NodaTime.2.0.0-alpha20140807.nupkg。这或许可以解释一下,哈哈。 - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接