c# - 当 Visual Studio 打开时,新的 csproj 会永远重新生成文件
问题描述
我node.exe
在编译之前生成了一些 .cs 文件,然后将其包含在我的项目中。
我通过 CSProj 调用node.exe
并定义生成步骤。将 CSProj 迁移到新格式<Project Sdk="Microsoft.NET.Sdk">
后,文件会在 Visual Studio 打开时不断生成、擦除和再次生成(使用 VS2017 和 VS2019 测试)。
这是我的目标文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
</PropertyGroup>
<Target Name="SetVariables">
<ItemGroup>
<_NodeJsExe Include="$(MSBuildThisFileDirectory)..\..\..\Node.js.redist\*\tools\win-x64\node.exe"/>
</ItemGroup>
<PropertyGroup>
<__NodeJsExe>@(_NodeJsExe);</__NodeJsExe>
<NodeJsExe>$(__NodeJsExe.Substring(0, $(__NodeJsExe.IndexOf(';'))))</NodeJsExe>
</PropertyGroup>
</Target>
<Target Name="ProblemHere" BeforeTargets="TransformDuringBuild;PrepareForBuild;CoreCompile" DependsOnTargets="SetVariables;CleanFilesBeforeBuild">
<Exec Command=""$(NodeJsExe)"..." />
</Target>
<Target Name="CleanFilesBeforeBuild">
<ItemGroup>
<Ts2LangFiles Include="$(GeneratedFolder)\**\*.cs" />
</ItemGroup>
<Delete Files="@(Ts2LangFiles)"/>
</Target>
</Project>
任何人都知道问题是什么?
解决方案
发现 Visual Studio 正在设计时构建一些目标。
如果我将此添加到我的自定义目标中,MSBuild 将停止不断生成文件:
<Target Name="ProblemHere" Condition="$(DesignTimeBuild) != true And $(BuildingProject) == true" BeforeTargets="TransformDuringBuild;PrepareForBuild;CoreCompile" DependsOnTargets="SetVariables;CleanFilesBeforeBuild">
我只是还没有理解这是否是 Visual Studio 中的错误,或者问题是否是我的,我正在使用不应该使用的目标。