【问题标题】:Getting help on dotnet-aspnet-codegenerator debug output获取有关 dotnet-aspnet-codegenerator 调试输出的帮助
【发布时间】:2022-01-10 07:44:07
【问题描述】:

我正在将一个本地登录身份页面搭建到一个已经具有默认身份的 asp.net 核心解决方案中。我这样做是为了自定义我的登录页面。

在我的期末考试之前,我已经使用两个使用相同基本代码并安装了更多软件包的测试应用程序成功地做到了这一点。

对于我的应用,当我发出以下命令时,我收到此错误:

PM> dotnet-aspnet-codegenerator identity --dbContext ApplicationDbContext

Failed to get Project Context for C:\Users\...\rollbase.csproj.
To see more information, enable tracing by setting environment variable 'codegen_trace' = 1

docs 中没有关于'codegen_trace' 的信息。

我已经搜索并发现了很多关于这个错误的引用。但找不到任何东西:

  • 什么是“项目上下文”
  • 如何使用“codegen_trace”

解决方案构建成功。

我一直非常小心地跟踪所涉及的包裹

  • Microsoft.VisualStudio.Web.CodeGeneration.Design
  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.AspNetCore.Identity.UI
  • Azure.Identity

使用

  • <TargetFramework>net5.0</TargetFramework>
  • dotnet-aspnet-codegenerator' (version '5.0.0')
  • dotnet sdk 5.0.403
  • Microsoft.NETCore.App 5.0.12

大多数帖子都在谈论回滚工具版本/包等。我想知道是否有人实际上可以指出可靠的调试策略。


我在下面的这个问题中添加信息

使用提供的帮助 - codegen_trace 的输出

Microsoft.Extensions.ProjectModel.MsBuildProjectContextBuilder.Build()
/_/src/Ext.ProjectModel.MsBuild.Sources/MsBuildProjectContextBuilder.cs:line 56

At Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program
.GetProjectInformation(String projectPath, String configuration) in
/_/src/dotnet-aspnet-codegenerator/Program.cs:line 290

At Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program
.BuildAndDispatchDependencyCommand(String[] args,
String projectPath, String buildBasePath, String configuration, Boolean noBuild, ILogger logger)
in /_/src/dotnet-aspnet-codegenerator/Program.cs:line 173

Microsoft.VisualStudio.Web.CodeGeneration.Tools.Program
.<>c__DisplayClass19_0.<Execute>b__0() in
/_/src/dotnet-aspnet-codegenerator/Program.cs:line 129

从这个输出看来,安装包 Microsoft.VisualStudio.Web.CodeGeneration.Tools 5.0.2 中存在问题

我已尝试在 Visual Studio 2019(最新)中将包更新为 6.0,0,但得到以下结果:

NU1202: Package Microsoft.VisualStudio.Web.CodeGeneration.Design 6.0.0 is not compatible with net5.0 (.NETCoreApp,Version=v5.0). Package Microsoft.VisualStudio.Web.CodeGeneration.Design 6.0.0 supports: net6.0 (.NETCoreApp,Version=v6.0)

我查看了该项目的 github 存储库,但找不到任何有关与 .NETCoreApp,Version=v5.0 兼容性的文档

参考原错误信息:

PM> dotnet-aspnet-codegenerator identity --dbContext ApplicationDbContext
Failed to get Project Context for C:\Users\...\rollbase.csproj

我已经比较了代码生成器工作的项目的 .csproj 文件与代码生成器无法获取项目上下文的项目。

主要区别在于属性组。

代码生成器工作:

<PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <UserSecretsId>aspnet-testbase1-57C4221E-46E9-4653-A734-4C412F7C523D</UserSecretsId>
  </PropertyGroup>

找不到项目上下文的地方:

<PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <UserSecretsId>aspnet-rollbase-6D7D2449-EB25-45CE-A8D3-EDAB69CDCAB3</UserSecretsId>
    <RootNamespace></RootNamespace>
    <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
    <AssemblyName />
    <PackageId />
    <EnableNETAnalyzers>false</EnableNETAnalyzers>
  </PropertyGroup>

【问题讨论】:

  • 您能分享一下rollbase.csproj 文件的内容吗?

标签: asp.net-core asp.net-identity code-generation


【解决方案1】:

请检查您的代码生成器 CLI 工具版本是否与您的 .NET 版本相同。如果您使用的是 Linux 或 mac,则需要将 codegen_trace 设置为这样的环境变量

codegen_trace=1

如果你使用的是 Powershell,你可以这样设置。

$env:codegen_trace=1

有一个与此相关的 GitHub 开放问题。请检查解决方案。 - https://github.com/dotnet/Scaffolding/issues/1388

【讨论】:

    【解决方案2】:

    了解codegen_trace 环境变量及其输出的最佳方法是阅读source code

    要启用 Trace 日志,请在运行 dotnet-aspnet-codegenerator 之前设置 codegen_trace 环境变量:

    • 命令提示符

      SET codegen_trace=1
      
    • PowerShell

      $env:codegen_trace=1
      
    • Bash/Zsh/Fish

      export codegen_trace=1
      

    项目上下文是指项目信息的上下文。 *.csproj 文件中包含的大部分项目信息。您的问题很可能是您的项目无法成功构建。您必须确保您的项目是可构建的。

    对于您的dotnet-aspnet-codegenerator identity --dbContext ApplicationDbContext 命令,您至少需要安装以下软件包才能正确处理。

    dotnet add package Microsoft.EntityFrameworkCore.Design
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    dotnet add package Microsoft.AspNetCore.Identity.UI
    dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
    

    【讨论】:

    • 感谢 Anuraj 和 Will 的意见。我已仔细阅读您的建议。请注意,我已经介绍了代码生成器和 TargetFramework 的匹配版本以及在我原来的问题中的成功构建。
    【解决方案3】:

    我编辑了项目文件的 PropertyGroup 部分。从它是什么(参见上面有问题的附加信息)到:

    <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <UserSecretsId>aspnet-rollbase-6D7D2449-EB25-45CE-A8D3-EDAB69CDCAB3</UserSecretsId>
      </PropertyGroup>
    

    身份文件的脚手架使用:

    dotnet-aspnet-codegenerator identity --dbContext ApplicationDbContext
    [Trace]: Command Line: identity --dbContext ApplicationDbContext
    Building project ...
    [Trace]: Command Line: --no-dispatch --port-number 52819 identity --dbContext ApplicationDbContext --dispatcher-version 5.0.0+a93dad81ee7f820d8e33d3f91e066ef68053d004
    Finding the generator 'identity'...
    Running the generator 'identity'...
    ...etc...
    

    【讨论】:

    • 最终解决起来很容易。感谢那些为解决此问题做出贡献的人。
    猜你喜欢
    • 2020-12-06
    • 2020-08-28
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多