首页 > 解决方案 > 当 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="&quot;$(NodeJsExe)&quot..." />
  </Target>

  <Target Name="CleanFilesBeforeBuild">
    <ItemGroup>
      <Ts2LangFiles Include="$(GeneratedFolder)\**\*.cs" />
    </ItemGroup>
    <Delete Files="@(Ts2LangFiles)"/>
  </Target>
  </Project>

任何人都知道问题是什么?

标签: c#node.jsvisual-studiocsproj

解决方案


发现 Visual Studio 正在设计时构建一些目标。

如果我将此添加到我的自定义目标中,MSBuild 将停止不断生成文件:

 <Target Name="ProblemHere" Condition="$(DesignTimeBuild) != true And $(BuildingProject) == true" BeforeTargets="TransformDuringBuild;PrepareForBuild;CoreCompile" DependsOnTargets="SetVariables;CleanFilesBeforeBuild">

我只是还没有理解这是否是 Visual Studio 中的错误,或者问题是否是我的,我正在使用不应该使用的目标。


推荐阅读