Visual studio VS 2017在从msbuild控制台构建切换到IDE时冗余构建代码(第一次)
VS 2017在项目加载时为web应用程序设置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
LastActiveSolutionConfig
,从而触发该项目的后续构建,因为:
- 该属性在相应的
文件中设置,如果需要,将创建该文件.csproj.user
文件是项目依赖项的一部分.csproj.user
temporalyGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.CS
和friends)-我们的msbuild生成它们是为了满足VS.检查preserveNew
-检查同时,我将通过添加
.csproj
文件来修改它,看看它是否有用。没有人在我们这里本地构建Release
,它总是AnyCPU
平台,所以我不关心其他配置,除了Debug | AnyCPU
,这就是我要做的:
- 将生成详细信息设置为诊断李>
- 生成并查找生成此文件的msbuild文件的位置:
TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
- 查找一些可以更改的条件,以防止文件丢失 生成李>
- 设置一些属性以更改条件并防止生成该文件
目录的生成代码。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设置的函数来管理此行为,我建议您可以随时发布您的请求。感谢您的共享,您可以随时将其标记为非常好的工作!