gpt4 book ai didi

visual-studio - dotnet cli与新vs2017 msbuild的关系

转载 作者:行者123 更新时间:2023-12-03 05:30:43 28 4
gpt4 key购买 nike

随着从 project.json 迁移到 VS2017 引入的新 csproj 格式,我正在努力理解 dotnet 之间的区别> cli 和新的 msbuild 以及何时使用其中之一。

1) 要从命令行构建新的 csproj netstandard 库,我是否应该调用 dotnet cli(例如 dotnet Restore dotnet build)或使用 msbuild(例如 msbuildExampleNetstandard.sln)。

2) 另外,我的理解是 msbuild 有两个版本,一个基于完整框架构建,另一个针对 dotnet core。它是否正确?我应该始终使用 dotnet 版本

3) dotnet cli 是独立的还是需要安装 msbuild?例如,当您安装 dotnet SDK 时,是否也会安装 msbuild?如果是的话,这与vs2017安装的版本不同吗?

最佳答案

问题

  1. To build a new csproj netstandard library from the command line, should I be calling the dotnet cli (for example dotnet restore dotnet build) or use msbuild (for example msbuild ExampleNetstandard.sln).

目前两者都表现良好 dotnet建立在 msbuild 之上。所以这是一个品味问题。您还可以使用 dotnet CLI 调用 msbuild 任务。 (dotnet msbuild <msbuild_arguments>)

一开始,所有.NET核心的东西都只在dotnet中而不是 msbuild 。这很麻烦,因为很多东西已经构建在msbuild上与 dotnet 配合得不好开箱即用(例如 Xamarin)。所以他们把这些东西移到了 msbuild并构建dotnetmsbuild之上.

dotnet具有 msbuild 中没有的一些功能,例如dotnet new 。在我看来,dotnetmsbuild更容易使用,所以我更喜欢 dotnet .

为了更清楚地说明,我添加了 msbuild 之间的比较和dotnet在我的文章末尾。

  1. Also, my understanding is that there are two versions of msbuild, one built on the full framework and another targeting dotnet core. Is this correct? Should I always use the dotnet version

只有一个 msbuild。 dotnet CLI 正在使用 msbuild:

Since CLI uses MSBuild as its build engine, we recommend that these parts of the tool be written as custom MSBuild targets and tasks, since they can then take part in the overall build process

https://learn.microsoft.com/en-us/dotnet/articles/core/tools/extensibility

旧版本 msbuild缺乏 .NET Core 支持。也许那是另一个版本;)

我同意这很令人困惑,因为几个月前情况非常不同。

  1. Is dotnet cli standalone or does it require msbuild to be installed?. For instance when you install the dotnet SDK does this install msbuild as well? If so is this different to the version that is installed with vs2017?

我对此不确定,但很容易测试。我已经删除了所有 msbuild.exe,它仍然有效。发现它使用了SDK文件夹中的msbuild.dll。例如“C:\Program Files\dotnet\sdk\1.0.3\MSBuild.dll”

如果你删除那个,就有证据:

When msbuild.dll removed

msbuild.dll 实际上是 msbuild.exe,正如您在属性中看到的:

msbuild.dll properties of SDK 1.0.3

一些代码

如果您查看 dotnet CLI 的代码,您可以看到它正在生成 msbuild命令。

例如dotnet restore ,由 RestoreCommand class inside dotnet CLI 创建.

精简版:

public class RestoreCommand : MSBuildForwardingApp
{
...
public static RestoreCommand FromArgs(string[] args, string msbuildPath = null)
{
var result = parser.ParseFrom("dotnet restore", args);
...
var msbuildArgs = new List<string>
{
"/NoLogo",
"/t:Restore",
"/ConsoleLoggerParameters:Verbosity=Minimal"
};
...
return new RestoreCommand(msbuildArgs, msbuildPath);
}

public static int Run(string[] args)
{
RestoreCommand cmd;
try
{
cmd = FromArgs(args);
}
catch (CommandCreationException e)
{
return e.ExitCode;
}

return cmd.Execute();
}
...
}

您可以看到dotnet restore刚刚打电话msbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal

<小时/>

如果您检查 RestoreCommand in the time of dotnet v1.0.0 RC2 ,它没有使用 msbuild但正在打电话nuget直接。

return NuGet3.Restore(args, quiet);

dotnet之间的映射和msbuild

我在 dotnet 之间进行了映射和msbuild 。它并不完整,但重要的命令都在那里。

Dotnet                 | Msbuild                                    | Remarks                         
-----------------------|--------------------------------------------|---------------------------------
Add | |
-----------------------|--------------------------------------------|---------------------------------
Build | /t:Build |
-----------------------|--------------------------------------------|---------------------------------
Build --no-incremental | /t:Rebuild |
-----------------------|--------------------------------------------|---------------------------------
Clean | /t:clean |
-----------------------|--------------------------------------------|---------------------------------
Complete | |
-----------------------|--------------------------------------------|---------------------------------
Help | | Help!
-----------------------|--------------------------------------------|---------------------------------
List | |
-----------------------|--------------------------------------------|---------------------------------
Migrate | - |
-----------------------|--------------------------------------------|---------------------------------
Msbuild | | Forwarding all
-----------------------|--------------------------------------------|---------------------------------
New | |
-----------------------|--------------------------------------------|---------------------------------
Nuget | | *
-----------------------|--------------------------------------------|---------------------------------
Pack | /t:pack |
-----------------------|--------------------------------------------|---------------------------------
Publish | /t:publish |
-----------------------|--------------------------------------------|---------------------------------
Remove | |
-----------------------|--------------------------------------------|---------------------------------
Restore | /NoLogo /t:Restore |
| /ConsoleLoggerParameters:Verbosity=Minimal |
-----------------------|--------------------------------------------|---------------------------------
Run | /nologo /verbosity:quiet |
| /p:Configuration= /p:TargetFramework |
-----------------------|--------------------------------------------|---------------------------------
Sln | | Not in msbuild
-----------------------|--------------------------------------------|---------------------------------
Store | /t:ComposeStore |
-----------------------|--------------------------------------------|---------------------------------
Test | /t:VSTest /v:quiet /nologo |
-----------------------|--------------------------------------------|---------------------------------
Vstest | | Forwarding to vstest.console.dll

* dotnet nuget:向 csproj 添加/删除包,也限制 nuget.exe 集,请参阅 comparison

PS no markdown tables in SO :(

关于visual-studio - dotnet cli与新vs2017 msbuild的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422488/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com