Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Visual Studio和MSBuild进行确定性构建?_C#_Visual Studio_Msbuild_Deterministic - Fatal编程技术网

C# 如何使用Visual Studio和MSBuild进行确定性构建?

C# 如何使用Visual Studio和MSBuild进行确定性构建?,c#,visual-studio,msbuild,deterministic,C#,Visual Studio,Msbuild,Deterministic,我已经到了可以在VisualStudio2019中重复构建并拥有确定性构建的地步。。。在使用MSBuild v16在命令行上构建时也是如此。不幸的是,使用VS2019生成时输出的程序集与使用MSBuild生成时不同 我理解确定性构建过程的概念,以及编译器在做出选择时考虑的无数因素。我需要做的是弄清楚Visual Studio在编译过程中到底在做什么,以便可以使用MSBuild进行复制。据我所见,VisualStudio绕过了MSBuild,直接进入编译器(这并没有使这变得更容易) 有没有人尝试过

我已经到了可以在VisualStudio2019中重复构建并拥有确定性构建的地步。。。在使用MSBuild v16在命令行上构建时也是如此。不幸的是,使用VS2019生成时输出的程序集与使用MSBuild生成时不同

我理解确定性构建过程的概念,以及编译器在做出选择时考虑的无数因素。我需要做的是弄清楚Visual Studio在编译过程中到底在做什么,以便可以使用MSBuild进行复制。据我所见,VisualStudio绕过了MSBuild,直接进入编译器(这并没有使这变得更容易)

有没有人尝试过这一点,并取得了成功?也许你尝试过,然后放弃了?这两个问题的答案同样有用

提前谢谢

如何使用Visual Studio和MSBuild进行确定性构建

事实上是为了构建C#项目,而不是通过IDE调用MSBuild来构建项目。VSIDE调用MSBuild来生成项目,该项目本身与通过命令行编译的MSBuild一致。MSBuild位于VS2019文件夹中的
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\xxxx\MSBuild\Current\Bin

只是VSIDE集成了很多工具。如果在VS IDE中安装了一些与内置相关的扩展或工具,则可能会影响最终的生成。MSBuild(命令行)是一个纯编译工具,VSIDE将调用它进行编译

-------------------------------

首先,我想知道您是否使用VS IDE及其针对VS
开发者命令提示符(存在于VS2019 IDE下)来分别构建项目。如果是这样,我认为您应该确保命令行参数是否与VSIDE中的构建参数一致

首先,请禁用扩展下的任何第三方扩展,以防它们影响VS IDE中的MSBuild

然后,确保在构建项目时,应该注意每个项目的配置
Debug
Release
)或平台
x64
x86
任何CPU

然后,应在MSBuild命令行中执行以下操作:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx
确保构建说明是一致的

------------------------------------

第二个,当您在另一个单一代理中使用VS2019的构建工具时(可以在没有VS IDE的情况下单独安装),如果是这样,您应该确保其版本与VS IDE相同。(构建工具版本
v16.xxx
与VS IDE版本
v16.xxx
)不同版本的MSBuild将有稍微不同的版本,因此要保持一致

实际上,MSBuild使用编译文件来构建c#项目,因此VSIDE和MSBuild对于c#文件都是一致的。不同的编译器使用
csc
没有问题

此外要查看更多deatile:您可以通过以下方式查看详细的EDD生成日志:

在与IDE的对比中:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx -v:detailed
工具
-->
选项
-->
项目和解决方案
-->
生成并运行
-->将
MSBuild项目生成输出详细程度
设置为
详细

MSBuild中:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx -v:detailed
如何使用Visual Studio和MSBuild进行确定性构建

事实上是为了构建C#项目,而不是通过IDE调用MSBuild来构建项目。VSIDE调用MSBuild来生成项目,该项目本身与通过命令行编译的MSBuild一致。MSBuild位于VS2019文件夹中的
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\xxxx\MSBuild\Current\Bin

只是VSIDE集成了很多工具。如果在VS IDE中安装了一些与内置相关的扩展或工具,则可能会影响最终的生成。MSBuild(命令行)是一个纯编译工具,VSIDE将调用它进行编译

-------------------------------

首先,我想知道您是否使用VS IDE及其针对VS
开发者命令提示符(存在于VS2019 IDE下)来分别构建项目。如果是这样,我认为您应该确保命令行参数是否与VSIDE中的构建参数一致

首先,请禁用扩展下的任何第三方扩展,以防它们影响VS IDE中的MSBuild

然后,确保在构建项目时,应该注意每个项目的配置
Debug
Release
)或平台
x64
x86
任何CPU

然后,应在MSBuild命令行中执行以下操作:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx
确保构建说明是一致的

------------------------------------

第二个,当您在另一个单一代理中使用VS2019的构建工具时(可以在没有VS IDE的情况下单独安装),如果是这样,您应该确保其版本与VS IDE相同。(构建工具版本
v16.xxx
与VS IDE版本
v16.xxx
)不同版本的MSBuild将有稍微不同的版本,因此要保持一致

实际上,MSBuild使用编译文件来构建c#项目,因此VSIDE和MSBuild对于c#文件都是一致的。不同的编译器使用
csc
没有问题

此外要查看更多deatile:您可以通过以下方式查看详细的EDD生成日志:

与IDE中