标签: dotnet-cli

将 dotnetcore 项目迁移到 1.0.4 后出现“dotnet build”错误

我一直在尝试在迁移的 .net 核心项目(从 1.0.0-preview2-003131 到 1.0.4)上运行 dotnet build 命令。我按照此处提到的迁移项目的步骤进行操作,并使用 Visual Studio 2017 构建解决方案。但是,使用 dotnet CLI 命令“dotnet build”会出现以下错误:

C:\Program Files\dotnet\sdk\1.0.4\Microsoft.Common.CurrentVersion.targets(2867,5):错误 MSB4216:无法运行“GenerateResource”任务,因为 MSBuild 无法创建或连接到任务主机运行时“CLR4”和架构“x86”。请确保 (1) 请求的运行时和/或体系结构在计算机上可用,以及 (2) 所需的可执行文件“C:\Program Files\dotnet\sdk\1.0.4\MSBuild.exe”存在并且可以跑。

我之前迁移了几个其他服务,在整理了几个包依赖项后,CLI 命令运行得很好。我检查了错误中提到的 sdk 位置,但找不到 MSBuild.exe(不过我确实找到了 MSBuild.dll 和 MsBuild.deps 文件)。我需要 CLI 命令来为我拥有的 CI/CD 设置工作。非常感谢破译和修复此错误的任何帮助。

系统详情:

  1. Visual Studio 2017 社区
  2. dotnet --version --> 1.0.4

我遵循的迁移步骤:

  1. 更改 global.json 中的 sdk 版本
  2. 运行 dotnet migrate 命令
  3. 在VS 2017中打开解决方案并构建它。构建成功。

编辑:我认为这是一个 dotnet 核心项目。显然(甚至在运行 dotnet migrate 命令之前),该解决方案中的一个项目已经针对 .Net 4.5.2。相关的 .csproj 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> …
Run Code Online (Sandbox Code Playgroud)

msbuild-4.0 .net-core dotnet-cli visual-studio-2017

4
推荐指数
1
解决办法
3395
查看次数

具有多个目标框架的项目的 dotnet 发布 sln 失败

我有很多项目的解决方案。一些目标框架netcoreapp2.1,一些其他目标框架netstandard2.0,一个项目有双目标框架

<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

我想要一个用于 win10 的神器,只需一个命令:

dotnet publish MySolution.sln -c Release -o "targetFolder" -r win10-x64
Run Code Online (Sandbox Code Playgroud)

使用此命令,我在使用双目标框架构建项目时遇到此错误。这是错误:

C:\Program Files\dotnet\sdk\2.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CrossTargeting.targets(31,5) error : The 'Publish' target is not supported without specifying a target framework. The current project targets multiple frameworks, please specify the framework for the published application.
Run Code Online (Sandbox Code Playgroud)

错误很明显。最后我发现 dll 在输出目录中编译,看起来它是一个 netstandard2.0 dll,因为我的应用程序仍然可以工作。

我不喜欢肮脏的东西,那么我该如何解决我的问题呢?

如果可能的话,我会避免调用 N 次“dotnetpublish”命令。

target-framework .net-core dotnet-cli

4
推荐指数
1
解决办法
8074
查看次数

如何使用 .NET CLI 自定义模板获取项目名称的驼峰式大小写版本

我正在尝试为 dotnet CLI 创建一个模板项目,并且需要更改项目名称的格式以进行某些替换。具体来说,我们域内的约定使用项目名称的驼峰版本作为需要存储在配置文件中的标识符。

通常,模板会执行看似非常简单的搜索/将模板项目名称替换为您使用 dotnet new 创建的项目的名称。此搜索区分大小写,因此它只会选取大小写完全相同的名称实例。

但就我而言,我还需要它来匹配名称的驼峰式大小写版本,并将其替换为新名称的驼峰式大小写版本。这可能吗?

这个参考资料有相当多的信息,表明有一个参数生成器支持大小写转换,但特别说它不支持驼峰式大小写。我真正需要的是能够将第一个字符从大写更改为小写。

知道如何插入项目名称的驼峰式大小写版本吗?

这是我的实验 template.json 的大小写和命令行参数,但显然没有骆驼外壳。

{
  "$schema": "http://json.schemastore.org/template",
  "identity": "TemplateTest.CSharp",
  "groupIdentity": "TemplateTest.Console",
  "author": "TemplateTest",
  "classifications": [ "Common", "Console" ],
  "name": "TemplateTest console template",
  "shortName": "test",
  "preferNameDirectory": true,
  "tags": {
    "language": "C#"
  },
  "sourceName": "TemplateTest",
  "symbols": {
    "apiname": {
      "type": "parameter",
      "datatype": "text",
      "defaultValue": "##FIX THIS##",
      "replaces": "templateTest"
    },
    "nameUpper": {
      "type": "generated",
      "generator": "casing",
      "parameters": {
        "source": "name",
        "toLower": false
      },
      "replaces": "TEMPLATETEST"
    },
    "nameLower": {
      "type": "generated", …
Run Code Online (Sandbox Code Playgroud)

templates dotnet-cli

4
推荐指数
1
解决办法
2266
查看次数

dotnet cli如何使用以前的sdk/框架创建项目?

假设我正在使用安装了 Blazor 模板的 Core 3.0

我的 VS 更新并下载了 sdk ,现在我的 dotnet cli默认3.1 preview X可以工作3.1 preview

因此 usingdotnet new不会显示我在使用时安装的已安装 Blazor 模板3.0

我尝试了这些命令至少查看以前模板的名称或实际创建3.0Blazor 项目,但没有任何效果

dotnet new --sdk-version "3.0.100-preview7-012821"
dotnet new --framework "netcoreapp3.0"

# Invalid input switch:--sdk-version3.0.100-preview7-012821
Run Code Online (Sandbox Code Playgroud)

如何列出dotnet new以前的 sdk/框架的模板,然后实际创建它们?

c# dotnet-cli

4
推荐指数
1
解决办法
1585
查看次数

为什么 $(SolutionDir) 在 dotnet CLI 中未定义?

我正在尝试从 构建我的项目dotnet CLI

我正在使用dotnet build,但失败了。

如何重现:

  1. 使用 Visual Studio 模板创建一个简单的控制台应用程序

  2. 将名为的文件添加Colors.txt到解决方案目录

  3. 添加一个名为的文件Names.txt到项目目录

  4. 修改csproj文件以包含post-build事件

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
    
    <Target Name="CopySettingsToOutput" AfterTargets="PostBuildEvent">
        <Exec Command="copy $(ProjectDir)\Names.txt $(TargetDir)\Names.txt" />
        <Exec Command="copy $(SolutionDir)\Colors.txt $(TargetDir)\Colors.txt" />
    </Target>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在使用 Visual Studio 进行构建(已构建)

  6. 现在使用dotnet build命令构建,但失败了。它说:

错误 MSB3073:命令“copy Undefined \Colors.txt C:\---path---\Colors.txt”退出,代码为 1。

为什么$(SolutionDir)使用时未定义dotnet build

.net-core dotnet-cli

4
推荐指数
1
解决办法
2071
查看次数

在 mac/linux 上调用时,“dotnet ef migrations add”将 \r\n 替换为 \n

我在使用 dotnet ef cli 工具创建新迁移时遇到了可重复的问题。我与主要使用 Windows 的开发人员合作开展一个项目,在 MacOS 和 Linux 上工作没有出现重大问题。我们使用 .HasData() 方法进行了流畅的实体配置和一些数据播种

 builder.HasData(new SomeType
        {
            NameEn = @"multi
                        line string"
        });
Run Code Online (Sandbox Code Playgroud)

当在 Windows 上创建迁移时,它会为每次遇到新行生成带有“\r\n”的迁移文件,但是当在 mac/linux 系统上创建任何迁移时,它会将其捕获为更改并生成 migrationBuilder.UpdateData 条目“\r\n”被替换为“\n”。在 Windows 上进行下一次迁移时,它会再次被捕获并转换回“\r\n”。

这对于成功地将迁移应用到数据库没有什么影响,但它成功地混淆了 git diff 结果并使其更难以审查。不必要的更新我不需要提及......

有人遇到过这样的问题吗?有什么解决办法吗?我找不到任何有关此问题的报告问题,在我看来,团队中的人员在不同的系统上工作的情况并不少见。

我使用“Entity Framework Core .NET 命令行工具 6.0.0”

预先感谢您的任何帮助

.net entity-framework-core dotnet-cli

4
推荐指数
1
解决办法
586
查看次数

使用“dotnet new console”时如何禁用顶级语句?

我在 VSCode 中使用以下命令创建了一个 C# 项目,并自动为此项目启用了顶级语句。如何在 Visual Studio Code 中为 C# 项目禁用顶级语句?

dotnet新控制台--framework net7.0

c# dotnet-cli .net-7.0

4
推荐指数
1
解决办法
4445
查看次数

如何使用 dotnet build 命令并行构建(使用所有核心)

使用msbuild命令我可以这样做:

msbuild -m
Run Code Online (Sandbox Code Playgroud)

使用多个核心进行构建。

这可以通过dotnet build命令实现吗?

查看文档我看到:

dotnet build 使用 MSBuild 来构建项目,因此它支持并行和增量构建。有关更多信息,请参阅增量构建

但是,链接的 MSBuild 文档仅讨论如何在定义目标时启用增量构建,而没有提及有关启用并行构建的任何内容。

.net msbuild build dotnet-cli

4
推荐指数
1
解决办法
2001
查看次数

如何使用旧的第三方依赖项构建基于net46框架的ASP.NET Core RC2应用程序

我有一个闪亮的新Asp.Net核心MVC应用程序,它引用了一些较旧的net45库.

在完整的net45框架上与Asp.Net Core RC1一起使用.从Asp.NET Core rc1迁移到rc2我遇到了一个障碍,我不知道如何修复.

该应用程序是一个使用EF6,Autofac,Kendo.MVC的ASP.NET核心应用程序,它需要在完整的.Net 4.6框架上运行,因为有使用WCF的参考库.

在从rc1迁移到rc2时我首先更新NuGet.config提要指向https://www.myget.org/F/aspnetcirelease/api/v3/index.json然后我对以下内容进行了以下更改:project.json

  • 从最顶层节点中删除"version"
  • 将以下属性添加到complationOptions对象:"debugType":"portable"
  • 依赖:AspNet改为AspNetCore
  • 依赖:改变所有rc1-final,到*
  • 检查MVCMVC Tag Helpers从已重命名6.0,以1.0
  • 删除所有依赖项 Application Insights
  • 删除所有依赖项 Microsoft.AspNet.Tooling.Razor
  • 添加依赖项 "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0-*" }
  • 添加新的内容对象: "content": [ "wwwroot", "Views", "web.config", "appsettings.json" ]
    • 更新所有使用语句AspNetCore.*而不是引用AspNet.*

然后我用以下内容替换frameworks对象:

"frameworks": {
  "netcoreapp1.0": {
    "imports": [
      "net45"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我做了一件事dotnet restore,一切都解决了,除了1个包裹:

error: Package Kendo.Mvc 2016.1.412 is not …
Run Code Online (Sandbox Code Playgroud)

wcf entity-framework-6 kendo-asp.net-mvc asp.net-core dotnet-cli

3
推荐指数
1
解决办法
1550
查看次数

如何更改更新数据库ef迁移的连接字符串?

我正在尝试运行Update-Database,并且我想指定连接字符串,但是CLI却在寻找错误的字符串。我的appsettings.json文件中有两个连接字符串:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "LocalWindows": "data source=.\\SQLEXPRESS;initial catalog=Intranet;persist security info=True;integrated security=true;",
    "AzureDevelopment": "Server=tcp:en..."
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行Update-Database时,AzureDevelopment始终是它使用的键。因此,如果我将LocalWindows连接字符串复制到AzureDevelopment的值,它将更新正确的数据库。此外,如果我删除AzureDevelopment但像这样离开LocalWindows:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "LocalWindows": "data source=.\\SQLEXPRESS;initial catalog=Intranet;persist security info=True;integrated security=true;"
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到:

Value cannot be null.
Parameter name: connectionString
Run Code Online (Sandbox Code Playgroud)

因此似乎在某个时候,CLI选择使用AzureDevelopment字符串,并且我无法再更改键或提供连接字符串作为参数。

我的问题是,迁移CLI如何知道要使用的连接字符串?它是通过启动设置的反射魔术来检测字符串还是什么?我在网上看到的是在运行Update-Database时如何指定项目。CLI曾经有-ConnectionString和-ConnectionStringName参数,但这些参数不再可用。

ef-migrations entity-framework-6 dotnet-cli asp.net-core-2.0

3
推荐指数
1
解决办法
1572
查看次数