【问题标题】:Directory.CreateDirectory not exists in .NET Core.NET Core 中不存在 Directory.CreateDirectory
【发布时间】:2015-09-09 06:22:54
【问题描述】:

我正在尝试在 .NET Core 中使用 Directory.CreateDirectory。但它似乎不存在。 有没有其他方法可以在 .NET Core 中创建目录? 这是我的 project.json 的一部分:

 "dependencies": {
        "EntityFramework.SqlServer": "7.0.0-beta4",
        "EntityFramework.Commands": "7.0.0-beta4",
        "Microsoft.AspNet.Mvc": "6.0.0-beta4",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta4",
        "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta4",
        "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta4",
        "Microsoft.AspNet.Authentication.Google": "1.0.0-beta4",
        "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta4",
        "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta4",
        "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
        "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta4",
        "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta4",
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
        "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta4",
        "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4",
        "Microsoft.Framework.ConfigurationModel.UserSecrets": "1.0.0-beta4",
        "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta4",
        "Microsoft.Framework.Logging": "1.0.0-beta4",
        "Microsoft.Framework.Logging.Console": "1.0.0-beta4",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta4",
        "System.IO.FileSystem.Primitives" : "4.0.0-beta-22816",
        "System.IO.FileSystem": "4.0.0-beta-22816",
        "Mandrill.Client": "1.0.0-*",
        "Microsoft.AspNet.Session": "1.0.0-beta4"
    },

    "commands": {
        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000",
        "gen": "Microsoft.Framework.CodeGeneration",
        "ef": "EntityFramework.Commands"
    },

    "frameworks": {
        "dnx451": { },
        "dnxcore50": { }
    },

    "exclude": [
        "wwwroot",
        "node_modules",
        "bower_components"
    ],
    "publishExclude": [
        "node_modules",
        "bower_components",
        "**.xproj",
        "**.user",
        "**.vspscc"
    ],
    "scripts": {
        "postrestore": [ "npm install", "bower install" ],
        "prepare": [ "gulp copy" ]
    }
}

我在 .NET Core 中成功恢复了 dll-s,如图所示:


更新: 问题不存在。当我在 .NET Core 上运行此代码时,它可以工作。只有鼠标悬停的描述不正确,它说 Not Available for .NET Core。 我建议删除这个问题。

【问题讨论】:

  • 你在哪里声明了这个依赖?你可以粘贴你的 project.json 吗?
  • @khillang 我已经包含了我的大部分 project.json。
  • 问题是误报。我将删除这个问题。当我运行代码时它可以工作,但在屏幕截图中看起来它不存在。

标签: asp.net-core asp.net-core-mvc .net-core


【解决方案1】:

修复依赖项/框架程序集

由于System.IO.FileSystem 是一个.NET Core 依赖项(完整的.NET 框架已经在System.IOmscorlib 中包含这些类型),您需要将其从dependencies 移动到dnxcore50.dependencies

例子:

"frameworks": {
  "dnx451": {
    "frameworkAssemblies": {
      "System.Collections": "",
      "System.IO": "",
      "System.Runtime": "",
      "System.Xml": "",
      "System.Xml.Linq": "",
      "System.Threading.Tasks": "",
      "System.Text.Encoding": ""
    }
  },
  "dnxcore50": {
    "dependencies": {
      "System.IO": "4.0.10-beta-*",
      "System.Console": "4.0.0-beta-*",
      "System.Linq": "4.0.0-beta-*",
      "System.Reflection": "4.0.10-beta-*",
      "System.Runtime": "4.0.20-beta-*",
      "System.Threading.Tasks": "4.0.10-beta-*",
      "System.ComponentModel": "4.0.0-beta-*"
    }
  }
}

首先,dependencies 节点用于“框架无关”依赖项,即适用于您在 frameworks 节点下指定的所有框架的依赖项。

dnx451.frameworkAssemblies(完整的 .NET Framework 4.5.1)节点用于 GAC 的程序集,随附完整的 .NET 框架。这些不是通过 NuGet 下载的,而只是在您的项目中引用。

最后,dnxcore50.dependencies 节点用于 .NET Core 特定的依赖项。这些是一组新的 NuGet 包,它们共同构成 .NET Core。这些是使用 NuGet 下载和引用的。

恢复包

您需要确保软件包本身已恢复。有时在 project.json 中声明依赖是不够的。

如果您在 Visual Studio 中编辑 project.json 文件,它应该会在保存文件时自动恢复包。否则你可以尝试在 project.json 目录中运行dnu restore

另外,您可以尝试将版本更改为4.0.0-beta-*

【讨论】:

  • 包自动恢复。那不是问题。当我使用 JustDecompile 打开 System.IO.FileSystem 时,我看到了 Directory 类,但是当我将鼠标悬停在 Directory.CreateDirectory 上时,它说 .NET Core 不支持...
  • 更新了我的答案:)
  • 我不确定我会得到什么?如果我在依赖项中有“System.IO.FileSystem”:“4.0.0-beta-22816”,则为 dnx 451 和 dnxcore 恢复 dll。我认为只有当我们为 dnx451 和 dnxcore 有不同的 dll-s 时才需要使用您建议的部分依赖项,这不是这种情况,对吗?
  • 那么如果一切正常,那有什么问题呢?我了解到您已成功恢复 dll。我之所以这么回答,是因为您一开始没有提供足够的信息。我放弃了……
  • 正如 khillang 所说,系统包属于 dependencies for dnxcore50,而不是整个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多