如何从 .NET 4.6 控制台应用程序引用 UWP+NET46 可移植库?

How do I reference a UWP+NET46 portable library from a .NET 4.6 console application?

我有一个面向 .NET 4.6 和通用 Windows 平台的可移植 class 库项目。此 class 库仅包含一个 class,其构造函数中包含以下代码行:

Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));

现在,我在同一个解决方案中创建了一个新的 .NET 4.6 控制台应用程序项目,并添加了一个对可移植 class 库的项目引用。调用包含上述代码行的方法会导致运行时出现以下异常:

Could not load file or assembly 'System.IO.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我在这里做错了什么?没有编译时错误或警告。

我尝试过的方法:手动添加缺少的(?)NuGet 包

System.IO.FileSystem 似乎是一个通过 NuGet 交付的库,作为 Microsoft.NETCore 大型包的一部分。好吧,也许我需要明确地将这个包添加到任何使用我的便携式 class 库的项目中。我尝试这样做。

Could not install package 'Microsoft.NETCore.Platforms 1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.

这种方法不走运。

我尝试过的事情:创建一个 project.json 文件

虽然网络上没有明确的信息,但我阅读了一些关于基于 project.json 的新 NuGet 工具或构建系统的花絮。只是为了实验,我在我的控制台应用程序项目中创建了以下 project.json 文件:

{
  "dependencies": {
   },
  "frameworks": {
    "net46": { }
  },
  "runtimes": {
    "win-anycpu": { }
  }
}

有效!运行时错误消失了!但是,我很快发现这不是正确的解决方案或不是完整的解决方案。我开始编写一些代码来读取配置部分的值,其中涉及使用 IConfigurationSectionHandler 接口,并得到以下编译时错误:

error CS0246: The type or namespace name 'IConfigurationSectionHandler' could not be found (are you missing a using directive or an assembly reference?)

此接口是系统程序集的一部分。我看到对这个程序集的引用,但是它有一个黄色的感叹号图标,并且警告中出现警告 window:

The referenced component 'System' could not be found.

这是我运行没主意的地方。我是不是漏掉了一些显而易见的东西?

我找到了解决办法。我最初的尝试是将 Microsoft.NETCore 包安装到控制台应用程序中,导致我原来的 post.

中显示的错误

但是,如果我只安装范围狭窄的软件包,例如System.IO.FileSystem,然后我成功了,应用程序正常运行。显然 Microsoft.NETCore "master package" 有一些特殊之处阻止它正确安装到相关项目中。