Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio VS 2017在从msbuild控制台构建切换到IDE时冗余构建代码(第一次)_Visual Studio_Msbuild_Visual Studio 2017 - Fatal编程技术网

Visual studio VS 2017在从msbuild控制台构建切换到IDE时冗余构建代码(第一次)

Visual studio VS 2017在从msbuild控制台构建切换到IDE时冗余构建代码(第一次),visual-studio,msbuild,visual-studio-2017,Visual Studio,Msbuild,Visual Studio 2017,VS 2017在项目加载时为web应用程序设置LastActiveSolutionConfig,从而触发该项目的后续构建,因为: 该属性在相应的.csproj.user文件中设置,如果需要,将创建该文件 .csproj.user文件是项目依赖项的一部分 因此,通过创建它,VS将在下次构建项目 想象一下,在清理工作区后,使用msbuild在命令行上构建所有内容,然后切换回VS并点击build按钮。它又在建了 因此,有一些愚蠢的自动生成的CS文件与工作流相关,它们只由VS生成,而不是由msbui

VS 2017在项目加载时为web应用程序设置
LastActiveSolutionConfig
,从而触发该项目的后续构建,因为:

  • 该属性在相应的
    .csproj.user
    文件中设置,如果需要,将创建该文件
  • .csproj.user
    文件是项目依赖项的一部分
因此,通过创建它,VS将在下次构建项目

想象一下,在清理工作区后,使用msbuild在命令行上构建所有内容,然后切换回VS并点击build按钮。它又在建了

  • 因此,有一些愚蠢的自动生成的CS文件与工作流相关,它们只由VS生成,而不是由msbuild生成(
    temporalyGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.CS
    和friends)-我们的msbuild生成它们是为了满足VS.检查
  • 接下来,我们将确保所有复制到输出目录文件都使用
    preserveNew
    -检查
  • 我已经忘记了在从msbuild切换到IDE时,我们还必须做些什么来确保VS不会冗余地重新生成代码。现在这个是新的

    如何防止VS 2017添加此属性?这是绝对必要的吗


    同时,我将通过添加
    .csproj
    文件来修改它,看看它是否有用。没有人在我们这里本地构建
    Release
    ,它总是
    AnyCPU
    平台,所以我不关心其他配置,除了
    Debug | AnyCPU

    ,这就是我要做的:

    • 将生成详细信息设置为诊断
    • 生成并查找生成此文件的msbuild文件的位置:
      TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
    • 查找一些可以更改的条件,以防止文件丢失 生成
    • 设置一些属性以更改条件并防止生成该文件

    如果需要,我的解决方案是使用预期属性生成.csproj.user文件。这是令人难以置信的恼人,一个人必须这样做。以下是可以进入
    目录的生成代码。build.Targets

    
    
    IsWebApplication
    的计算如下:

    <IsWebApplication>$(ProjectTypeGuids.Contains('349c5851-65df-11da-9384-00065b846f21'))</IsWebApplication>
    
    $(ProjectTypeGuids.Contains('349c5851-65df-11da-9384-00065b846f21'))
    
    最后,目标是一系列更大目标的一部分,这些目标在开始时运行,并验证csproj是否符合我们的要求或确保某些条件:

    
    断言表达;
    AssertNoAssemblyInfo;
    资产负债表;
    AssertLocalApplicationHostFile;
    AssertImportsDFVersioning;
    确保共享Binlink;
    AssertSharedBinOutputPath;
    断言路径;
    EnsureSprojectUserForWebApplications
    
    已经这样做了。你不能这么做-他们没有提供任何挂钩。唯一的解决方案是在使用MSBuild构建时人工执行相同的逻辑。通过这种方式,垃圾始终一致地生成。我的问题不是关于它,而是关于将属性
    LastActiveSolutionConfig
    写入web应用程序项目的
    .csproj.user
    文件。我当前的解决方法是在生成msbuild控制台时自己生成这个该死的文件。似乎您已经找到了替代的解决方法(在生成过程中生成文件),你可以考虑把它作为分享有用信息的答案。如果您确实需要msbuild或VS设置的函数来管理此行为,我建议您可以随时发布您的请求。感谢您的共享,您可以随时将其标记为非常好的工作!