kim*_*gro 67 msbuild csproj dotnet-cli visual-studio-2017
随着从VS2017引入project.json的新csproj格式的转变,我正在努力理解dotnetcli和new 之间的区别msbuild以及何时使用另一个.
1)要csproj从命令行构建新的netstandard库,我应该调用dotnetcli(例如dotnet restore dotnet build)还是使用msbuild(例如msbuild ExampleNetstandard.sln).
2)另外,我的理解是有两个版本msbuild,一个基于完整框架,另一个基于目标dotnet core.它是否正确?我应该经常使用dotnet version
3)是dotnet cli独立还是需要msbuild安装?例如,当您安装dotnet SDK时,这也安装了msbuild吗?如果是这样与vs2017安装的版本不同?
Jul*_*ian 110
1)要从命令行构建新的csproj netstandard库,我应该调用dotnet cli(例如dotnet restore dotnet build)还是使用msbuild(例如msbuild ExampleNetstandard.sln).
两者都很好,因为目前dotnet建立在上面msbuild.所以这是一个品味问题.您还可以使用dotnet CLI调用msbuild任务.(dotnet msbuild <msbuild_arguments>)
一开始,所有的.NET核心内容都只在dotnet,而不在msbuild.这很麻烦,因为许多已经建立的东西在开箱即msbuild用dotnet时效果不佳(例如Xamarin).于是他们把东西msbuild和建设dotnet之上msbuild.
dotnet有一些不在的功能msbuild,比如dotnet new.在我看来,dotnet比起来更容易使用msbuild,所以我更喜欢dotnet.
为了使它更清楚,我加之间的比较msbuild,并dotnet在帖子的末尾.
2)另外,我的理解是有两个版本的msbuild,一个基于完整框架,另一个基于dotnet核心.它是否正确?我应该总是使用dotnet版本
只有一个msbuild.dotnet CLI正在使用msbuild:
由于CLI使用MSBuild作为其构建引擎,因此我们建议将该工具的这些部分编写为自定义MSBuild目标和任务,因为它们可以参与整个构建过程
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
旧版本msbuild缺少.NET Core支持.也许这是另一个版本;)
我同意这是令人困惑的,因为几个月前这是非常不同的.
3)dotnet cli是独立的还是需要安装msbuild?例如,当您安装dotnet SDK时,这也安装了msbuild吗?如果是这样与vs2017安装的版本不同?
我对此不太确定,但很容易测试.我删除了所有msbuild.exe,它仍然有效.发现它使用SDK文件夹中的msbuild.dll.例如"C:\ Program Files\dotnet\sdk\1.0.3\MSBuild.dll"
如果你删除那个,有一个证明:
msbuild.dll实际上是msbuild.exe,您可以在属性中看到:
如果你查看dotnet CLI的代码,你可以看到它生成msbuild`命令.
例如dotnet restore,由RestoreCommanddotnet 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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
你可以看到dotnet restore只是打电话msbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal
如果你检查RestoreCommand的时间dotnet v1.0.0 RC2,它没有使用,msbuild但nuget直接打电话.
return NuGet3.Restore(args, quiet);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
*dotnet nuget:添加/删除软件包到csproj,也是有限的nuget.exe集,请参阅比较
PS中没有降价表:(:
| 归档时间: |
|
| 查看次数: |
10196 次 |
| 最近记录: |