dotnet core用户机密(user-secrets)可执行文件神秘地消失,为什么?

12

安装了最近的(我认为).NET Core,通过Visual Studio 2015创建了一个.NET Core Web项目,并尝试开始使用用户密钥。CLI声称它丢失了(在声称已经安装它之后...),如下所示:

E:\Projects\CodeServer>dotnet --version
1.0.0-preview1-002702

E:\Projects\CodeServer>dotnet restore
 <snip>
log  : Restoring packages for tool 'Microsoft.Extensions.SecretManager.Tools' in E:\Projects\CodeServer\src\CodeServer\project.json...
 <snip>
log  : Restore completed in 2345ms.

NuGet Config files used:
    C:\Users\Work User\AppData\Roaming\NuGet\NuGet.Config
    C:\ProgramData\nuget\Config\Microsoft.VisualStudio.Offline.config

Feeds used:
    https://api.nuget.org/v3/index.json
    C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

E:\Projects\CodeServer>dotnet user-secrets -h
No executable found matching command "dotnet-user-secrets"

E:\Projects\CodeServer>

根据请求,还需添加project.json文件:

{
  "userSecretsId": "<snip>",

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0-rc2-3002702",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview1-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview1-final",
      "type": "build"
    },
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview1-final",
      "type": "build"
    },
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
      "version": "1.0.0-preview1-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Authentication.Google": "1.0.0-rc2-final"
  },

  "tools": {
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    },
    "Microsoft.Extensions.SecretManager.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "gcServer": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

你能展示一下你的 project.json 文件吗? - svick
这只是来自VS的默认设置,但没问题。 - Fizzbuzz97
我无法重现这个问题,使用你的project.json时,我的dotnet user-secrets -h命令可以正常工作。 - svick
值得一提的是,在更新版本的.NET Core中,需要将Microsoft.Extensions.SecretManager.Tools包添加到project.json文件的“工具”部分。否则,“dotnet user-secrets”命令将会出现错误:“未找到与命令“dotnet-user-secrets”匹配的可执行文件”。(我还不知道为什么要删除project.lock.json文件)。 - tifkin
3个回答

31

在使用项目json文件中定义的任何工具包时,您必须使用与包含项目json文件的目录相同的目录。

例如,如果您的project.json文件位于,但您正在尝试从E:\Projects\CodeServer执行命令。 如果在尝试使用这些工具之前切换到E:\Projects\CodeServer\src\CodeServer\目录,则命令将正常工作。


1
这确实是问题所在。让我感到困惑的是,dotnet restore 在解决方案级别可以工作,但 dotnet user-secrets 却完全失败了。希望未来的版本能够提供更详细的错误信息。 - Fizzbuzz97

12

我发现包管理器控制台有时候(甚至全部时间)无法使用正确的目录(即使在默认项目下拉菜单中已选定)。如果您首先执行命令“cd src\YourProjectName”,然后执行例如“dotnet user-secrets -h”(获取帮助),则应该能够使用user-secrets工具。

dotnet user-secrets


4
在包管理器控制台中更改目录的方法,请点赞。谢谢。 - Hunter Tran
这在我的Visual Studio 2017 - 15.2中有效。谢谢! - Andrew Quaschnick

0

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