如何阻止 Visual Studio 在我的 csproj 的项目组中自动添加删除?

mar*_*han 5 .net c# msbuild visual-studio

我有一个 .NET 5 WPF 项目,在 csproj 文件中,我有

    <ItemGroup>
        <ViewModelFiles Include="**\*ViewModel.cs"></ViewModelFiles>
        <Content Include="@(ViewModelFiles)">
            <DependentUpon>$([System.String]::Copy('%(FileName)').Replace('Model', '.xaml'))</DependentUpon>
        </Content>
    </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但是,每当我将新项目添加到项目中时,IDE 都会自动将一行删除添加到 csproj 文件中。例如,添加Visual\Settings\Control\InputActionViewModel.cs后:

    <ItemGroup>
        <ViewModelFiles Include="**\*ViewModel.cs"></ViewModelFiles>
        <ViewModelFiles Remove="Visual\Settings\Control\InputActionViewModel.cs" />
        <Content Include="@(ViewModelFiles)">
            <DependentUpon>$([System.String]::Copy('%(FileName)').Replace('Model', '.xaml'))</DependentUpon>
        </Content>
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

This is troblesome as I need to make an additional manual operation for every item I created. I would like to know how to swich off this auto generation.

October 25, 2022 Edit

The following is my current code

  <ItemGroup>
    <Compile Update="**\*ViewModel.cs">
      <DependentUpon>$([System.String]::Copy('%(FileName)').Replace('Model', '.xaml'))</DependentUpon>
    </Compile>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

小智 -2

我认为这是因为这条线

<ViewModelFiles Include="**\*ViewModel.cs"></ViewModelFiles>
Run Code Online (Sandbox Code Playgroud)

已澄清包括 *ViewModel.cs 文件。而且,您正在使用新的 SDK 项目,添加的项目(文件)将自动包含在项目中。因此,两次,MSBuild 会自动删除名为 *ViewModel.cs 的项目。

如果您测试在添加项目时更改名称,例如 ViewModelXXX.cs 或 ViewXXXModel.cs,则不会添加一行。

如果你测试先添加项目,然后添加这一行

<ViewModelFiles Include="**\*ViewModel.cs"></ViewModelFiles>
Run Code Online (Sandbox Code Playgroud)

也不会添加一行。