6

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

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

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

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 巨型包的一部分。好的,也许我需要将此包显式添加到使用我的可移植类库的任何项目中。我试图这样做。

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?)

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

The referenced component 'System' could not be found.

这就是我没有想法的地方。我错过了一些完全明显的东西吗?

4

1 回答 1

1

我找到了解决方案。我最初的尝试是将 Microsoft.NETCore 包安装到控制台应用程序中,导致我原来的帖子中出现错误。

但是,如果我只安装范围较窄的包,例如 System.IO.FileSystem,那么我会成功并且应用程序可以正常工作。显然,Microsoft.NETCore“主包”有一些特别之处,阻止它正确安装到依赖项目中。

于 2015-08-21T06:25:12.143 回答